none
获取gridview的模板列中textbox的值。 RRS feed

  • 问题

  • 我在gridview中加了两个模板列,一个放textbox,一个放了ImageButton,我不想用gridview自带的更新,编辑功能,我想直接就在RowCommand事件中搞定更新数据的功能。

    问题就是在RowCommand事件中不太好找这个textbox控件。我只是简单看了MSDN的演示,然后,模仿了一下,不成功,索引超出范围,代码如下:


    protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
    {
    if (e.CommandName == "Edit")
    {
    int index = Convert.ToInt32(e.CommandArgument);
    GridViewRow row = GridView1.Rows[index];

    TextBox MailStr = (TextBox)row.FindControl("txtMail");
    //这里为sql执行语句,更新人员的邮件地址,
    }
    }


    protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
    {
    if(e.Row.RowType==DataControlRowType.DataRow)
    {
    ImageButton imgBTN = (ImageButton)e.Row.FindControl("ImageButton1");
    imgBTN.CommandArgument = e.Row.RowIndex.ToString();
    }

    错误信息:

    错误: Sys.WebForms.PageRequestManagerServerErrorException: 索引超出范围。必须为非负值并小于集合大小。
    参数名: index

    2010年7月21日 7:52

答案

  • 我自己搞定了,还是看了msdn上的获取引发的行的索引。

    <%# Container.DataItemIndex %>

    完整的代码:

     <asp:ImageButton ID="ImageButton1" runat="server" ImageUrl="~/Images/thepic.gif"
                                                ToolTip="保存设置"  CommandName="Edit" CommandArgument=<%# Container.DataItemIndex %>
                                                OnClientClick="return confirm('确定要保存?');" />

    然后在RowCommand中

    int index = Convert.ToInt32(e.CommandArgument);

      TextBox str= (TextBox)(GridView1.Rows[index].FindControl("txtMail"));

    2010年7月22日 2:51

全部回复

  • 不用写那么麻烦啊

    TextBox MailStr = (TextBox)(this.GridView1.Rows[e.RowIndex].FindControl("txtMail"));

     

    2010年7月21日 8:50
  • 不用写那么麻烦啊

    TextBox MailStr = (TextBox)(this.GridView1.Rows[e.RowIndex].FindControl("txtMail"));

     


    不行哦。我需要在RowCommand事件中处理哦,你的这个e.RowIndex,好像取不到的哦。
    2010年7月22日 0:52
  • 我自己搞定了,还是看了msdn上的获取引发的行的索引。

    <%# Container.DataItemIndex %>

    完整的代码:

     <asp:ImageButton ID="ImageButton1" runat="server" ImageUrl="~/Images/thepic.gif"
                                                ToolTip="保存设置"  CommandName="Edit" CommandArgument=<%# Container.DataItemIndex %>
                                                OnClientClick="return confirm('确定要保存?');" />

    然后在RowCommand中

    int index = Convert.ToInt32(e.CommandArgument);

      TextBox str= (TextBox)(GridView1.Rows[index].FindControl("txtMail"));

    2010年7月22日 2:51