نمایش نتایج 1 تا 23 از 23

نام تاپیک: متد درست کدام است؟

  1. #1

    متد درست کدام است؟

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

  2. #2
    با استفاده از متد Findcontrol از داخل e کنترل Hyperlink مربوطه رو پیدا کنید و سپس Attribute رو روی اون add کنید.


    چیزی شبیه به این:
    e.Item.findcontrol("myHyperLink" + e.Item.ID).Attributes.Add("onclick","Open");
    هر که بر مرکب باطل نشیند ، در سراى پیشمانى فرودش مى‏آورند

  3. #3
    سلام و خسته نباشید
    متد بالا درست نمی باشد و در این دستور error می دهد.
    لطفاً راهنمایی دیگری؟
    با تشکر

  4. #4
    به صورت زیر در روال 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

  5. #5
    سلام و خسته نباشید
    معادل CType در C#‎.NET
    ممنون

  6. #6

    HtmlAnchor lnk = (HtmlAnchor)DataGrid1.Items[e.Item.DataSetIndex].FindControl("myhyperlink");


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

  7. #7
    ممنون از لطفتون ولی چرا روی HtmlControls ، خطا میده و میگه could not be fond .
    با تشکر

  8. #8
    ممنون
    من کدا را به این شکل نوشتم ولی 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
    با تشکر

  9. #9
    کسی جواب رو نمی دونه؟

  10. #10
    علت این هست که وقتی این روال اجرا میشه آیتم از ابتدا یعنی با 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();");
    }

  11. #11
    ممنون
    ولی باز هم یه error . ببخشید چون من از این کدا سر در نمی یارم و نمی دونم اشکال از کجاست.
    کدا رو نوشتم ولی error زیر را میده:

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

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

  12. #12
    شما اسم هاپرلینکتون چی گذاشتید؟
    بهش خاصیت Runat=server دادید؟

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

  14. #14
    اون روال رو من درواقع مشابه یک دلیگیت استفاده کردم و در PageLoad به گرید AddressOf دادم که برای عمل DataBinding از اون روال استفاده کنه...
    شما میتونید از خود روال مستقیم استفاده کنید..در نهایت فرقی نمیکنه..
    من اون کدی که قرار دادم رو روی سیستم خودم چک کردم و درست بود....
    پیشنهاد می کنم...شما کدتون رو قرار بدید ... یا یک نمونه مثال بنویسید بفرسیتید ...تا شاید بشه اینطوری کمک کرد.

  15. #15
    یک نمونه از کدهای من بصورت زیر است:

    private
    void 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();
    }


    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)
    {

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


  16. #16
    خط زیر در کدتون اضافه هست...حذف کنید...
    شما کدتون درسته...باید خط به خط کدتون رو اجرا کنید تا ببینید اشکال از کجاست...
    بهتر بود کد HTML تون رو هم میذاشتید.شاید اونجا ایرادی دارید.

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

  17. #17
    ممنون
    با حذف خط فوق همچنان 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 باز می شه.
    با تشکر

  18. #18
    خوب علت مشخص شد...که چرا 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();");
    }

  19. #19
    یه سوال دیگه
    من بههر یک از hyperlink هام در یک حلقه for یک مقدار به عنوان id میدم تا هنگام فراخوانی تابع Open این مقدار بعنوان id به تابع ارسال میشه؟
    ولی در این روش همیشه آخرین مقدار ارسال میشه؟
    یک راه حل برای انجام این کار؟
    با تشکر

  20. #20
    آخه تو حلقه FOR و به صورت Random به چه دردی میخوره؟؟؟این id?

  21. #21
    این 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>";
    و کد های زیر را نوشته ام:
    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)
    {
    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();");
    آیا در کل این روش درست است؟
    اشکال کار من؟
    یا توضیح یک روش درست؟
    با تشکر

  22. #22
    اول اینکه به این علت به شما ایراد میگیره چون شما به کنترل a خودتون هیچ id ندادید و خاصیت runat=server رو هم ندادید برای همین خطای Object refrence .... میده...
    دوم اینکه نه روشتون زیاد جالب نیست...یه کمی بیشتر توضیح بدید..شاید بتونم بگم چه روشی بهتره..
    ببینید همه اینا بستگی داره که دیتابیستون چه جوری طراحی کرده باشید.

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

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

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •