PDA

View Full Version : متد درست کدام است؟



zahracomputer
جمعه 14 مهر 1385, 06:37 صبح
سلام و خسته نباشید
من می خوام وقتی که hyperlink موجود در templateColumn کلیک میشه خاصیت Onclick فعال بشه. برای این منظور کد زیر را نوشتم:
private void DataGrid1_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
e.Item.Attributes.Add("onclick","Open()");
}
که این کد موجب میشه در هر نقطه ایی از datagrid کلیک کنیم خاصیت onclick فعال بشه.
کد درست برای انجام این کار؟
با تشکر

titbasoft
جمعه 14 مهر 1385, 15:23 عصر
با استفاده از متد Findcontrol از داخل e کنترل Hyperlink مربوطه رو پیدا کنید و سپس Attribute رو روی اون add کنید.


چیزی شبیه به این:

e.Item.findcontrol("myHyperLink" + e.Item.ID).Attributes.Add("onclick","Open");

zahracomputer
جمعه 14 مهر 1385, 21:39 عصر
سلام و خسته نباشید
متد بالا درست نمی باشد و در این دستور error می دهد.
لطفاً راهنمایی دیگری؟
با تشکر

white fox
جمعه 14 مهر 1385, 22:27 عصر
به صورت زیر در روال DataBinding بنویسید.


Private Sub DataGrid1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles DataGrid1.ItemDataBound
Dim lnk As HtmlControls.HtmlAnchor = CType(DataGrid1.Items(e.Item.DataSetIndex).FindCon trol("myHyperLink"), HtmlControls.HtmlAnchor)
lnk.Attributes.Add("onclick", "Open();")
End Sub

zahracomputer
جمعه 14 مهر 1385, 22:34 عصر
سلام و خسته نباشید
معادل CType در C#.NET
ممنون

white fox
جمعه 14 مهر 1385, 22:46 عصر
HtmlAnchor lnk = (HtmlAnchor)DataGrid1.Items[e.Item.DataSetIndex].FindControl("myhyperlink");


ویرایش کردم دستور رو.

zahracomputer
جمعه 14 مهر 1385, 22:59 عصر
ممنون از لطفتون ولی چرا روی HtmlControls ، خطا میده و میگه could not be fond .
با تشکر

zahracomputer
شنبه 15 مهر 1385, 01:04 صبح
ممنون
من کدا را به این شکل نوشتم ولی error زیر را میده

Server Error in '/file' Application.

Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index
و به جای قسمت DataSetIndex اندیس قرار دادم یا فقط به جای Index و.. به صورت های زیادی به کار بردم ولی روی قسمت نوشته شده error میده؟
علت این error
با تشکر

zahracomputer
یک شنبه 16 مهر 1385, 14:49 عصر
کسی جواب رو نمی دونه؟

white fox
یک شنبه 16 مهر 1385, 20:08 عصر
علت این هست که وقتی این روال اجرا میشه آیتم از ابتدا یعنی با Header آغاز میشه به همین علت عدد -1 برمیگردونه..
شما کدتون رو به صورت زیر اصلاح کنید..مشکلتون حل میشه.


if (e.Item.ItemType == System.Web.UI.WebControls.ListItemType.Alternating Item || e.Item.ItemType == System.Web.UI.WebControls.ListItemType.Item)
{
HtmlAnchor lnk = (HtmlAnchor)e.Item.FindControl("lnk1");
lnk.Attributes.Add("onclick", "Open();");
}

zahracomputer
یک شنبه 16 مهر 1385, 21:47 عصر
ممنون
ولی باز هم یه error . ببخشید چون من از این کدا سر در نمی یارم و نمی دونم اشکال از کجاست.
کدا رو نوشتم ولی error زیر را میده:

Server Error in Applicatio
Object reference not set to an instance of an object
و Error روی خط:

lnk.Attributes.Add("onclick", "Open();");
ممنون

white fox
یک شنبه 16 مهر 1385, 23:02 عصر
شما اسم هاپرلینکتون چی گذاشتید؟
بهش خاصیت Runat=server دادید؟

zahracomputer
دوشنبه 17 مهر 1385, 05:11 صبح
ممنون
ولی الان error زیر را میده:
Server Error in '/file' Application.
--------------------------------------------------------------------------------
Specified cast is not valid.
نام hyperlink من hyperlink2 است که در کد شما به جای lnk1 ، عبارت hyperlink2 را نوشتم.
در ضمن عبارت
Handles DataGrid1.ItemDataBound
(که در قسمت اول گفته بودید) در C#.NET روی این خط کد error می گیره که من اونو ننوشتم . نحوه درست اضافه کردن این کد به برنامه.
با تشکر

white fox
دوشنبه 17 مهر 1385, 09:12 صبح
اون روال رو من درواقع مشابه یک دلیگیت استفاده کردم و در PageLoad به گرید AddressOf دادم که برای عمل DataBinding از اون روال استفاده کنه...
شما میتونید از خود روال مستقیم استفاده کنید..در نهایت فرقی نمیکنه..
من اون کدی که قرار دادم رو روی سیستم خودم چک کردم و درست بود....
پیشنهاد می کنم...شما کدتون رو قرار بدید ... یا یک نمونه مثال بنویسید بفرسیتید ...تا شاید بشه اینطوری کمک کرد.

zahracomputer
دوشنبه 17 مهر 1385, 10:45 صبح
یک نمونه از کدهای من بصورت زیر است:


privatevoid Page_Load(object sender, System.EventArgs e)
{
// Put user code to initialize the page here

string f,sql;
sqlConnection1.Open();
sql="Select * from Table4 ";
SqlDataAdapter da=new SqlDataAdapter(sql,sqlConnection1);
da.Fill(dataSet1,"Table4");
StreamReader reader = new StreamReader(@"D:\\Inetpub\\wwwroot\\file\\12.txt");
f=reader.ReadLine();
dataSet1.Tables[0].Rows[0]["name"]=f;
DataGrid1.DataSource=dataSet1.Tables["Table4"];
DataGrid1.DataBind();
sqlConnection1.Close();
}



privatevoid DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e) //Handles DataGrid1.ItemDataBound;

{
if (e.Item.ItemType == System.Web.UI.WebControls.ListItemType.Alternating Item || e.Item.ItemType == System.Web.UI.WebControls.ListItemType.Item)
{

System.Web.UI.HtmlControls.HtmlAnchor HyperLink2 =new System.Web.UI.HtmlControls.HtmlAnchor();
HtmlAnchor HyperLink = (HtmlAnchor)e.Item.FindControl("HyperLink2");
HyperLink.Attributes.Add("onclick", "Open();");
}
}

white fox
دوشنبه 17 مهر 1385, 20:46 عصر
خط زیر در کدتون اضافه هست...حذف کنید...
شما کدتون درسته...باید خط به خط کدتون رو اجرا کنید تا ببینید اشکال از کجاست...
بهتر بود کد HTML تون رو هم میذاشتید.شاید اونجا ایرادی دارید.


System.Web.UI.HtmlControls.HtmlAnchor HyperLink2 =new System.Web.UI.HtmlControls.HtmlAnchor();

zahracomputer
دوشنبه 17 مهر 1385, 22:41 عصر
ممنون
با حذف خط فوق همچنان error فوق رو میده کدهای HTML من هم به شکل زیر است.
نوشته شده توسط : || نظرات *************************************************
<%@ Page language="c#" Codebehind="WebForm6.aspx.cs" AutoEventWireup="false" Inherits="file.WebForm6" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML dir="rtl">
<HEAD>
<title>WebForm6</title>
<script language="javascript">
<!--
function Open(d)
{
Page=window.open("WebForm2.aspx?id="+d+"","",
'status=yes,scrollbars=yes,toolbar=no,menubar=no,l ocation=no ,width=550px,height=600px');
}
//-->
</script>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<asp:DataGrid id="DataGrid1" style="Z-INDEX: 101; LEFT: 150px; POSITION: absolute; TOP: 224px"
runat="server" AutoGenerateColumns="False">
<Columns>
<asp:TemplateColumn>
<ItemTemplate>
<TABLE>
<TR>
<%# DataBinder.Eval(Container.DataItem, "name") %>
</TR>
<TR>
<TD>نوشته شده توسط :
</TD>
<TD><%# DataBinder.Eval(Container.DataItem, "in") %></TD>
<TD>||
</TD>
<TD>
<asp:HyperLink id="HyperLink2" Runat="server" NavigateUrl="WebForm4.aspx"> نظرات <%# DataBinder.Eval(Container.DataItem, "d") %></asp:HyperLink></TD>
</TR>
<TR>
</TR>
</TABLE>
<asp:Label id="Label1" runat="server" Width="323px">*************************************************</asp:Label>
<asp:Label id="Label2" runat="server" Width="323px"></asp:Label>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
</form>
</body>
</HTML>

در این قسمت صفحه اول باز می شود و وقتی روی hyperlink کلیک می کنم error فوق را می دهد . در بخشی دیگه از برنامه همون اول صفحه error باز می شه.
با تشکر

white fox
سه شنبه 18 مهر 1385, 09:16 صبح
خوب علت مشخص شد...که چرا Object reference not set to an instance of an object دریافت میکردید..
من فکر کردم شما از کنترا هایپرلینک یا همون Anchor استفاده می کنید که با تگ <a> هست...
اما شما دارید از کنترل هایپرلینک ASP.NET استفاده میکنید..به همین علت هنگام FindControl چیزی پیدا نمیکرده...
شما کدتون رو به شکل زیر تغییر بدید.


if (e.Item.ItemType == System.Web.UI.WebControls.ListItemType.Alternating Item || e.Item.ItemType == System.Web.UI.WebControls.ListItemType.Item)
{
System.Web.UI.WebControls.HyperLink lnk = (System.Web.UI.WebControls.HyperLink)e.Item.FindCo ntrol("lnk1");
lnk.Attributes.Add("onclick", "Open();");
}

zahracomputer
چهارشنبه 19 مهر 1385, 21:26 عصر
یه سوال دیگه
من بههر یک از hyperlink هام در یک حلقه for یک مقدار به عنوان id میدم تا هنگام فراخوانی تابع Open این مقدار بعنوان id به تابع ارسال میشه؟
ولی در این روش همیشه آخرین مقدار ارسال میشه؟
یک راه حل برای انجام این کار؟
با تشکر

white fox
پنج شنبه 20 مهر 1385, 02:12 صبح
آخه تو حلقه FOR و به صورت Random به چه دردی میخوره؟؟؟این id?

zahracomputer
پنج شنبه 20 مهر 1385, 08:03 صبح
این id مقدار یکی از فیلدهای جدول می باشد. و من اونو به یک متغیر نسبت دادم تا از اون متغیر بعنوان id استفاده بشه.
آیا راه مناسبی برای استفاده از این فیلد بعنوان id در تابع جاوااسکریپت است؟
من به این نتیجه رسیدم که hyperlink ها را در حین کدنویسی بسازم و id رو به اونها نسبت بدم . بنابراین در datagrid یک ستون خالی با نام یکی از فیلدها بصورت زیر قرار دادم:
<TD>
DataBinder.Eval(Container.DataItem, "archive2") #%>%>
TD</>
که این ها در قسمت templatecolumn می باشند.
و در کد نویسی با این دستور یک هایپرلینک ایجاد کرده ام:
dataSet1.Tables[0].Rows[i]["archive2"]="<a class='News_Links' href=comment.aspx?id="+texta+">" + i+ "" + "نظر" + "</a>";
و کد های زیر را نوشته ام:
private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e) //Handles DataGrid1.ItemDataBound;
{
if (e.Item.ItemType == System.Web.UI.WebControls.ListItemType.Alternating Item || e.Item.ItemType == System.Web.UI.WebControls.ListItemType.Item)
{
HtmlAnchor lnk = (HtmlAnchor)e.Item.FindControl("archive2");
lnk.Attributes.Add("onclick", "Open();");
}
}
ولی باز هم error زیر را می دهد:

Server Error in Applicatio
Object reference not set to an instance of an object
و Error روی خط:

lnk.Attributes.Add("onclick", "Open();");
آیا در کل این روش درست است؟
اشکال کار من؟
یا توضیح یک روش درست؟
با تشکر

white fox
پنج شنبه 20 مهر 1385, 15:21 عصر
اول اینکه به این علت به شما ایراد میگیره چون شما به کنترل a خودتون هیچ id ندادید و خاصیت runat=server رو هم ندادید برای همین خطای Object refrence .... میده...
دوم اینکه نه روشتون زیاد جالب نیست...یه کمی بیشتر توضیح بدید..شاید بتونم بگم چه روشی بهتره..
ببینید همه اینا بستگی داره که دیتابیستون چه جوری طراحی کرده باشید.

zahracomputer
پنج شنبه 20 مهر 1385, 17:25 عصر
من دو جدول دارم یکی شامل نام کاربری ، آدرس وبلاگ، نام نویسنده ، 7 قسمت برای متن ، 7 تاریخ ، 7 ساعت ، و یک جدول آرشیو شامل آدرس وبلاگ و 7 قسمت برای متن و تاریخ و ساعت.
در اینجا در خانه متن شماره فایل که در واقع نام فایل است قرار دارد و سپس من بر اساس این نام متن را از فایل می خوانم.
از آنجاییکه من می خوام بدونم نظری که کاربر می نویسه مریوط به کدوم متن است می خوام شماره متن را به عنوان querystring قرار بدم تادر صفحه نظر با بررسی اون بدونم نظر ارایه شده توسط کاربر مربوط به کدام متن است و در دیتابیس قرار بگیرد.یعنی لازم است این querystring به صفحه نظر انتقال داده بشه.برای این منظور من آدرس hyperlink را صفحه فعلی قرار دادم و در تابع Open صفحه نظر را با querystring فراخوانی کردم.ولی نمی دانم چگونه این فیلد را مستقیماً در تابع قرار دهم.
(روشی را هم که در قبل گفتم جواب نمیده چون خاصیت hyperlink را صفحه نظر قرار دادم در صورتیکه من می خوام صفحه فعلی باقی بمونه و یک صفحه جدید باز بشه.)

id و runat=server را چگونه به این کدها اضافه کنم.
با تشکر