比如有一数据表绑丁到DGridQuery中,其第四列为字段Item(0,1,2,3),在下列程序中想获取删除行的Item的内容,下列写法不正确,应如何获取Item的内容?谢谢!!
private void DGridQuery_DeleteCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
   TextBox TxtItem = (TextBox)e.Item.Cells[3].Controls[0];
}

解决方案 »

  1.   

    这只是独取了一个TextBox控件吧.
    应该再加一个.Text吧.
      

  2.   

    private void DGridQuery_DeleteCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
       Label TxtItem = (Label)(e.Item.Cells[3].Controls[0]);
    }
      

  3.   

    有的时候想取不是编辑状态的值,这个时候通常不会使用模板列中放置TextBox通过e.Item.FindControl取值,有的网友问为什么取不到?这要看你前台的列怎么写的了,下面分别写出四种情况和这四种情况下面的取值方式:<asp:DataGrid id="DataGrid1" runat="server" AutoGenerateColumns="False" AllowPaging="True"> 
                    <Columns> 
                        <asp:BoundColumn DataField="vName" HeaderText="姓名0"></asp:BoundColumn> 
                        <asp:TemplateColumn HeaderText="姓名1"> 
                            <ItemTemplate> 
                                姓名 
                            </ItemTemplate> 
                        </asp:TemplateColumn> 
                        <asp:TemplateColumn HeaderText="姓名2"> 
                            <ItemTemplate> 
                                <%#DataBinder.Eval(Container.DataItem,"vName")%> 
                            </ItemTemplate> 
                        </asp:TemplateColumn> 
                        <asp:TemplateColumn HeaderText="姓名3"> 
                            <ItemTemplate> 
                                <asp:Label ID="name" Runat="server" Text='<%#DataBinder.Eval(Container.DataItem,"vName")%>'> 
                                </asp:Label> 
                            </ItemTemplate> 
                        </asp:TemplateColumn> 
                        <asp:ButtonColumn Text="删除" ButtonType="PushButton" CommandName="del"></asp:ButtonColumn> 
                    </Columns> 
                </asp:DataGrid> 
    列出了4种大家可能遇到的列: 
    (1)绑定列 
    (2)模板列中直接放静态的字符串 
    (3)模板列中直接放绑定的字符串 
    (4)模板列中通过Label放绑定的字符串 下面说明在按下了删除按钮以后的四种取值的方式: 
    if(e.CommandName=="del") 
                { 
                    Response.Write(DataGrid1.Columns[0].HeaderText+":"+e.Item.Cells[0].Text+"<br>"); 
                    Response.Write(DataGrid1.Columns[1].HeaderText+":"+e.Item.Cells[1].Text.Trim()+"<br>"); 
                    Response.Write(DataGrid1.Columns[2].HeaderText+":"+((DataBoundLiteralControl)e.Item.Cells[2].Controls[0]).Text.Trim()+"<br>"); 
                    Response.Write(DataGrid1.Columns[3].HeaderText+":"+((Label)e.Item.Cells[3].FindControl("name")).Text+"<br>");                 
                } 
    (1)第一种用绑定列的方式可以直接通过Cells[i].Text取 
    (2)第二种方式也直接可以取,但是讨厌的vs.net总是会在前台把列中的内容换行,所以这里还需要对输出的东西进行去除首尾的空格 
    (3)第三种方式是网友问的最多的,不能直接通过Cells[i].Text取到值,可以通过上面给出的方法来取,同样需要去除首尾的空格 
    (4)第四种方式也是最简单的方式,当然你可以直接写e.Item.FindControl("name")
      

  4.   

    TextBox TxtItem = (TextBox)e.Item.Cells[3].Controls[0];这条语句的语法没有错误。下一条语句为string Str=TxtItem.Text;问题是语句TextBox TxtItem = (TextBox)e.Item.Cells[3].Controls[0];不执行,就没法执行下一条语句了。在下列程序中运行就没有错误。
    private void DGridQuery_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
    {
       if((e.Item.ItemType==ListItemType.Item)||e.tem.ItemType==ListItemType.AlternatingItem)   ||(e.Item.ItemType==ListItemType.EditItem))
         {
              TextBox TxtItem = (TextBox)e.Item.Cells[3].Controls[0];
         }
    }