我写了一个DataGrid,在里面每行都有数个TextBox控件在DataGrid外有一个Button,点击后可获取每行每列TextBox中用户输入的值在click事件中是这样写的string txtFactory=((TextBox)DataGrid1.Items[0].FindControl("txtFactory")).Text;为什么每次获取到的都是空值呢?请大家帮忙看看

解决方案 »

  1.   

    string txtFactory=((TextBox)DataGrid1.Items[0].Controls.FindControl("txtFactory")).Text;
      

  2.   

    是索引不对吧
    要不你写成下面这样的试试
    (TextBox)e.Item.Cells[0].Controls[0]).Text.ToString()
      

  3.   

    如果在画面上直接看得见TextBox,试试到具体的单元格里找,比如
    DataGrid1.Items(0).Cells(4).Controls(0)
      

  4.   

    for(int i=0;i<dgQx.Items.Count;i++)
    {
    //                                   行数   从0开始的列数    固定的
    CheckBox _Check=(CheckBox)dgQx.Items[i].Cells[2].Controls[2].FindControl("chkData");Label _labSxID = (Label)dgQx.Items[i].Cells[0].Controls[2].FindControl("labSxID");
    if(_Check.Checked == true)
    {
    //1
    objAccess.SxID = Convert.ToInt32(_labSxID.Text.Trim());
    objAccess.SxValue = 1;
    objAccess.OnUpdate();
    }
    else
    {
    //0
    objAccess.SxID = Convert.ToInt32(_labSxID.Text.Trim());
    objAccess.SxValue = 0;
    objAccess.OnUpdate();
    }
    }
      

  5.   

    我是楼主试用了各位的方法,好象仍然不行我的HTML代码如下:
    <asp:datagrid id="DataGrid1" style="Z-INDEX: 102; LEFT: 8px; POSITION: absolute; TOP: 208px" runat="server"
    Width="100%" ForeColor="White" BorderColor="#3366CC" BorderStyle="None" BorderWidth="1px"
    BackColor="White" CellPadding="4" ShowFooter="True" AutoGenerateColumns="False" HorizontalAlign="Center">
    <SelectedItemStyle Font-Bold="True" ForeColor="#CCFF99" BackColor="#009999"></SelectedItemStyle>
    <ItemStyle Font-Size="9pt" HorizontalAlign="Center" ForeColor="#003399" VerticalAlign="Middle"
    BackColor="White"></ItemStyle>
    <HeaderStyle Font-Size="9pt" Font-Bold="True" HorizontalAlign="Center" ForeColor="Black" BackColor="#EAEAF4"></HeaderStyle>
    <FooterStyle Font-Size="9pt" HorizontalAlign="Center" ForeColor="Black" BackColor="White"></FooterStyle>
    <Columns>
    <asp:TemplateColumn HeaderText="配件名称">
    <ItemTemplate>
    <asp:Label ID="lblModel" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.ID") %>'>
    </asp:Label>
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn HeaderText="生产厂家">
    <ItemTemplate>
    <asp:TextBox ID="txtFactory" runat="server"></asp:TextBox>
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn HeaderText="配件规格">
    <ItemTemplate>
    <asp:TextBox ID="txtSpec" runat="server"></asp:TextBox>
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn HeaderText="单位">
    <ItemTemplate>
    <asp:TextBox ID="txtUnit" runat="server"></asp:TextBox>
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn HeaderText="序列号">
    <ItemTemplate>
    <asp:TextBox ID="ListNumber" runat="server"></asp:TextBox>
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn HeaderText="备注">
    <ItemTemplate>
    <asp:TextBox ID="Re" runat="server"></asp:TextBox>
    </ItemTemplate>
    </asp:TemplateColumn>
    </Columns>
    </asp:datagrid>
    事件代码如下string txtFactory=((TextBox)DataGrid1.Items[0].FindControl("txtFactory")).Text;改为string txtFactory=((TextBox)DataGrid1.Items[0].Cells[1].Controls[0].FindControl("txtFactory")).Text;也不行,请继续赐教
      

  6.   

    有可能是你没判断ListItemType试试这样处理
    if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
    {
          string txtFactory=((TextBox)DataGrid1.Items[0].FindControl("txtFactory")).Text;
    }
    如果是编辑项的话,判断条件就用e.Item.ItemType == ListItemType.EditItem就可以了
      

  7.   

    刚没看清楚的是,为什么要用DataGrid1.Items[0]?既然是事件的话应该直接用e.Item才是
      

  8.   

    我的那个事件是Button的事件,不是在DataGrid里的,不能使用e.Item
      

  9.   

    http://lovecherry.cnblogs.com/lovecherry/archive/2005/07/15/193477.html
    j看 看这篇文章
      

  10.   

    TextBox tx1 = (TextBox)this.DataGrid1.Items[0].Cells[0].FindControl("TextBox1");
    Response.Write("<script>alert('"+ tx1.Text+"')</script>");这样就可以了
      

  11.   

    已经搞定了犯了低级错误,忘记把绑定的代码写到!IsPostBack里了,呵呵,谢谢各位
      

  12.   

    page_load 里的绑定事件,加!page.ispostback