datagrid里能不能插入textbox?
数据表中有个SL(数量)字段,我想在datagrid里显示的数据里,每条记录前面都有个文本输入框,输入要修改的数字,提交后能直接修改数据表中SL(数量)这个字段的值。
比如:我现在通过datagrid显示了2条记录:
     序号  物品名称  数量
      1      牙刷     8
      2      毛巾     12
现在我想在“数量”后面增加一个输入框“领用数量”,能直接输入数字,如下所示:
     序号  物品名称  数量  领用数量
      1      牙刷     8     4
      2      毛巾     12    3
这里“领用数量”是手动输入的,输入完提交后,牙膏由8变为4,毛巾由12变为9,即可以直接修改数据库中的数据。
请问这应该怎么实现?

解决方案 »

  1.   

    我用的就是模板列啊,但在.cs文件里认不到这个textbox。代码如下:
    <asp:TemplateColumn> <HeaderStyle Width="14px"></HeaderStyle> <ItemTemplate>
    <asp:textbox id="ccsl" runat="server" Width="60px"></asp:textbox> </ItemTemplate>
    </asp:TemplateColumn>在CS文件里没法认到ccsl.Text。
    不知道那里错了
      

  2.   


    datagrid中的控件是直接不能使用的需要使用FindControl()方法才能找到TextBox ccsl =(TextBox)e.Item.Cells[0].FindControls("ccsl");
    ccsl.Text......
      

  3.   

    TO:oldcsdn() 
    把TextBox ccsl =(TextBox)e.Item.Cells[0].FindControls("ccsl");放到
    private void CC_button_Click(object sender, System.EventArgs e) 
    {
      .....
    }
    后报如下错误:
    c:\inetpub\wwwroot\wygl\ckgl\ckgl.aspx.cs(242): “System.EventArgs”并不包含对“Item”的定义
    这里e.Item中的e是什么?
      

  4.   

    e.Item是要放在DataGrid的事件里的,你Button按钮里面的e当然没有item的定义了.
      

  5.   

    我要在Button按钮里面调用ccsl.text,那要怎么定义ccsl ?
      

  6.   

    这么做没有意义啊,既然只为了修改这么一个参数何必用DATAGRID控件呢?好象没必要
      

  7.   

    如果把TextBox ccsl =(TextBox)e.Item.Cells[0].FindControls("ccsl");放在
    private void CC_button_Click(object sender, System.EventArgs e) 
    {
    ......
    }
    语句里,这里的e要改成什么?我把e改成DataGrid控件的名称DataGrid1,还是不行。
      

  8.   

    那你得用遍历才行foreach(DataGridItem mydt in DataGrid1....
      

  9.   

    建议你去lovecherry.cnblogs.com上面仔细看看
      

  10.   

    (TextBox)DataGrid.Controls[0].Controls[1+DataGrid.Items.Count].FindControl("ccsl");这样访问
      

  11.   

    请参考:页面<asp:datagrid id="DataGrid1" OnUpdateCommand="DataGrid1_UpdateCommand" ><Columns><asp:BoundColumn DataField ="序号" HeaderText ="序号" />
    <asp:BoundColumn DataField ="物品名称" HeaderText ="物品名称" />
    asp:BoundColumn DataField ="数量" HeaderText ="数量" /><asp:TemplateColumn HeaderText="领用数量">
    <ItemTemplate>
     &nbsp;
    </ItemTemplate>
    <EditItemTemplate>
    <asp:TextBox Runat =server text='' id="ccsl"  NAME="ccsl"/>
    </EditItemTemplate>
    </asp:TemplateColumn><asp:EditCommandColumn ButtonType="LinkButton" UpdateText="更新" CancelText="取消" EditText="编辑">
    </asp:EditCommandColumn></Columns>
    </asp:datagrid>
    代码
    private void DataGrid1_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)

       int num = Convert.ToInt32(e.Item.Cells[2].Text.Trim());
       TextBox txtCcsl =(TextBox)e.Item.Cells[2].FindControls("ccsl");
       int ccsl=Convert.ToInt32(txtCcsl.Text.Trim());
       num+ = ccsl;
     
      ....更新到数据库
       
    }
      

  12.   

    用liuhua_delphi()说的,
    (TextBox)DataGrid.Controls[0].Controls[1+DataGrid.Items.Count].FindControl("ccsl");这样访问确实可以访问,但如果有多条记录的时候,必须每条记录的“领用数量”都要输入才行,如果有一条没输的话就不行了。
    注:我是用foreach(DataGridItem id in this.DataGrid1.Items){  ..... }做循环的。
      

  13.   

    我把DataGrid1.Items.Count改成i 好象可以了