Home > ASP.net, Web > 在GridView的RowCommand事件中获取Rowindex,即获得数据行所在页的索引号

在GridView的RowCommand事件中获取Rowindex,即获得数据行所在页的索引号

September 8th, 2009 Tony hu Leave a comment Go to comments

先看一下我的后台代码:

        protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            //得到行所在的索引号
            int idx = Convert.ToInt32(e.CommandArgument);
            //得到各个控件的值
            string id = GridView1.Rows[idx].Cells[0].Text;
            string txt_ArtworkNum = ((TextBox)GridView1.Rows[idx].FindControl(“TextBox2″)).Text;
            string txt_RollNum = ((TextBox)GridView1.Rows[idx].FindControl(“TextBox3″)).Text;
            string txt_Artwork = ((TextBox)GridView1.Rows[idx].FindControl(“TextBox4″)).Text.Replace(“‘”, “””);
            string txt_ShelfAddress = ((TextBox)GridView1.Rows[idx].FindControl(“TextBox5″)).Text;
            string txt_OrderQty = ((TextBox)GridView1.Rows[idx].FindControl(“TextBox6″)).Text;
            string txt_Supplier = ((TextBox)GridView1.Rows[idx].FindControl(“TextBox7″)).Text.Replace(“‘”,”””);
            string txt_StartDate = ((TextBox)GridView1.Rows[idx].FindControl(“TextBox1″)).Text;
//其它代码省略……
           

再看一下原先的前台代码

<ItemTemplate>
 <asp:Button ID=”Button3″ runat=”server” CausesValidation=”False”
CommandArgument=”<%# Container.DataItemIndex %>”
CommandName=”Entry” Text=”入库” OnClientClick=”return confirm(‘确认要将此钢轮移出备用库放入当前使用库吗?’)”/>
 </ItemTemplate>
 </asp:TemplateField>

最后看一下改进后的代码

<ItemTemplate>
 <asp:Button ID=”Button3″ runat=”server” CausesValidation=”False”
CommandArgument=”<%# ((GridViewRow) Container).RowIndex %>”
CommandName=”Entry” Text=”入库” OnClientClick=”return confirm(‘确认要将此钢轮移出备用库放入当前使用库吗?’)”/>
</ItemTemplate>
</asp:TemplateField>

其实就是为了说明一个问题:

如果用Container.DataItemIndex 在后台代码中得到的是这一数据行在这个数据表中的序列,如果此Gridview不分页的话,用起来没有任何问题,如果分页的话,就不行了。如我们操作的是第二页的第二条记录,得到的序列是 11 ,即 idx =11 ,而我期望的是1.

如果用((GridViewRow) Container).RowIndex 那 idx=1; 即这一行代码得到的是此数据行在当前Gridview页面中的序列,如果PageSize=10的话,那idx 最大为9,最小为0.

今天项目中用到的,特别记录一下.

Categories: ASP.net, Web Tags: ,
  1. No comments yet.
  1. No trackbacks yet.