怎么实现在DataGrid中的一列出现文本框可批量编辑?

解决方案 »

  1.   

    批量编辑?什么概念啊?
    我知道你可以在Template列中加入你需要的空间,并使用<%# Bind('')%>来绑定对应的数据项目,起效果和普通的绑定一样的。
      

  2.   

    是说编辑一次就可以使该列的所有TextBox的值都变成你输入的值吗?
      

  3.   

    使用模板列就可以了。
    <asp:TemplateColumn>
        <ItemTemplate>
        <asp:TextBox id="TextBox1" runat="server"></asp:TextBox>
        </ItemTemplate>
    </asp:TemplateColumn>为DataGrid的ItemDataBind事件添加处理程序,比如DataGrid_DataBind
    然后在DataList_DataBind()方法中这样写:
    private void DataGrid_DataBind(object sender, System.Web.UI.WebControls.DataListItemEventArgs e)
    {
        //判断当前行是不是普通项或交替项,如果是,执行下面的逻辑
        if(e.Item.ItemType.Equals(ListItemType.Item)||e.Item.ItemType.Equals(ListItemType.AlternatingItem))
        {
            ((TextBox)e.Item.FindControl("你想找到的控件ID,这里是TextBox1")).Text=(DataRow)e.Item.DataItem["数据源字段名"].ToString();
        }这样就可以了。(DataRow)e.Item.DataItem["数据源字段名"].ToString()中的DataRow是当数据源是DataTable的一行时的写法。如果你的数据源是别的类型,要改成相应类型。
    当然,你也可以在HTML中直接绑定TextBox的Text属性是数据源的某个字段。不过我比较喜欢把数据绑定之类的程序都写在后台代码里。这样看起来比较清晰。
      

  4.   

    用模板列的ItemTemplate放置TextBox就ok了
      

  5.   

    用datagrid控件
    用到以下语句
    后台:
    foreach(DataGridItem dgi in dg.Items)
    {

    int id=Convert.ToInt32(dg.DataKeys[(int)dgi.ItemIndex]);
    int strtb1=Convert.ToInt32(((TextBox)dgi.FindControl("tb1")).Text.Trim());
    int strtb2=Convert.ToInt32(((TextBox)dgi.FindControl("tb2")).Text.Trim());


    string updateString="update shop_books set huiyuanjia="+strtb1+",yeshu="+strtb2+"where bookid="+id;

    comm.CommandText=updateString;
    comm.ExecuteNonQuery();
    }
    前台:<asp:datagrid id="dg" runat="server" DataKeyField="bookid" AutoGenerateColumns="False">
    <Columns>
    <asp:BoundColumn DataField="bookid" ItemStyle-HorizontalAlign="Center" HeaderText="书编号" />
    <asp:BoundColumn DataField="bookname" HeaderText="书名" />
    <asp:TemplateColumn HeaderText="huiyuanjia">
    <ItemTemplate>
    <asp:TextBox runat="server" id="tb1" Text='<%# DataBinder.Eval(Container.DataItem,"huiyuanjia")%>' />
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn HeaderText="tejiabook">
    <ItemTemplate>
    <asp:CheckBox ID="cb1" Runat="server"></asp:CheckBox>
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn HeaderText="yeshu">
    <ItemTemplate>
    <asp:TextBox runat="server" id="tb2" Text='<%# DataBinder.Eval(Container.DataItem,"yeshu")%>'/>
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn HeaderText="iskucunjimian">
    <ItemTemplate>
    <asp:CheckBox ID="cb2" Runat="server"></asp:CheckBox>
    </ItemTemplate>
    </asp:TemplateColumn>
    </Columns>有些列你用不上自己选啊