我的gridview中的行是动态添加的!添加完全部后可以批量插入数据库,但是增加了行后还能删除这行
代码如下aspx<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
            GridLines="None" onrowcommand="GridView1_RowCommand">
            <Columns>
                <asp:TemplateField HeaderText="sss">
                    <ItemTemplate>
                        <asp:TextBox ID="TextBox1" runat="server" Text='<%# Eval("sss") %>'/>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="ssss">
                    <ItemTemplate>
                        <asp:TextBox ID="TextBox2" runat="server" Text='<%# Eval("ssss") %>'/>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="sssss">
                    <ItemTemplate>
                        <asp:TextBox ID="TextBox3" runat="server" Text='<%# Eval("sssss") %>'/>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="ss">
                    <ItemTemplate>
                        <asp:TextBox ID="TextBox4" runat="server" Text='<%# Eval("ss") %>'/>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField ShowHeader="False">
                    <ItemTemplate>
                        <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" 
                            CommandName="dd" Text="X"></asp:LinkButton>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView> 
删除事件代码  protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "dd")
        {
            DataTable dt = ReadGridView();
            dt.Rows.RemoveAt();
            dt.AcceptChanges();
            this.GridView1.DataSource = dt;
            this.GridView1.DataBind();
        }
    }问题是在dt.Rows.RemoveAt();我怎么获得触发事件button所在datarow的索引呢

解决方案 »

  1.   

    <asp:TextBox ID="TextBox1" runat="server" Text='<%# Eval("sss") %>'/>
      

  2.   

    获取那一行的代码:DataGridView1.rows[e.RowsIndex]
      

  3.   

    e.ComandArgument 可以获取触发事件的行索引号
      

  4.   

    try{
    iIndex=Int32.parse(e.CommandArgument);
    }
    catch{}
      

  5.   


    protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "dd")
            {
                DataTable dt = ReadGridView();
                dt.Rows.RemoveAt();
                dt.AcceptChanges();
                this.GridView1.DataSource = dt;
                this.GridView1.DataBind();
            }
        }ReadGridView(): private DataTable ReadGridView()
        {
            DataTable dt = new DataTable();
            DataRow dr;
            dt.Columns.Add(new DataColumn("sss", typeof(string)));
            dt.Columns.Add(new DataColumn("ssss", typeof(string)));
            dt.Columns.Add(new DataColumn("sssss", typeof(string)));
            dt.Columns.Add(new DataColumn("ss", typeof(int)));
            for (int i = 0; i < this.GridView1.Rows.Count; i++)
            {
                TextBox t1 = (TextBox)this.GridView1.Rows[i].Cells[0].FindControl("TextBox1");
                TextBox t2 = (TextBox)this.GridView1.Rows[i].Cells[0].FindControl("TextBox2");
                TextBox t3 = (TextBox)this.GridView1.Rows[i].Cells[0].FindControl("TextBox3");
                TextBox t4 = (TextBox)this.GridView1.Rows[i].Cells[0].FindControl("TextBox4");
                dr = dt.NewRow();
                dr[0] = t1.Text.Trim();
                dr[1] = t2.Text.Trim();
                dr[2] = t3.Text.Trim();
                dr[3] = t4.Text.Trim();
                dt.Rows.Add(dr);
            }
            return dt;
        }代码中我操作的都是datatable我是通过改变datatable重新绑定来实现增行的!这样不能获得datatable中的索引么???
    或者谁有更好的方法实现删除行
      

  6.   

    iIndex=Int32.parse(e.CommandArgument); 不行吗???
      

  7.   


    e.CommandArgument=null无法转换int
    e.RowIndex根本点不出来
    可能因为我没直接操作gridview?
      

  8.   

    你在下面的事件中进行数据绑定了吗 ?protected void Page_Load(object sender, EventArgs e)
        {
        }
      

  9.   

    dt.PrimaryKey = new DataColumn[] { dt.Columns[0] }
    dt.Rows.Remove(dt.Rows.Find(1))