如何为所有行编辑整个列:GridView

时间:2011-11-04 17:47:00

标签: c# asp.net

所以我已经google'd并搜索了stackoverflow,现在我的大脑已经超负荷了。我是asp.net的新手,但是掌握了它。

我目前的要求是有一个gridview,在加载时,所有行的1列立即进入编辑模式。我用这个问题和代码让我走了:

Allowing one column to be edited but not another

<asp:gridview id="CustomersGridView"      
              datasourceid="CustomersSqlDataSource"      
              autogeneratecolumns="false"     
              autogenerateeditbutton="true"     
              allowpaging="true"      
              datakeynames="CustomerID"       
runat="server">      
    <columns>       
        <asp:boundfield datafield="CustomerID" readonly="true" headertext="Customer ID"/>
        <asp:boundfield datafield="CompanyName" readonly="true" headertext="Customer Name"/> 
        <asp:boundfield datafield="Address" headertext="Address"/>       
        <asp:boundfield datafield="City" headertext="City"/>       
        <asp:boundfield datafield="PostalCode" headertext="ZIP Code"/>     
    </columns> 
</asp:gridview>

我已经搜索并找到了一些很好的解决方案,但是,我并没有完全理解它们,并且在实现它们方面没有成功。他们是:

Edit/Update a single GridView field

Put multiple rows of a gridview into edit mode

所以我的问题是,您如何将列(例如邮政编码)同时放入所有行的编辑模式?

感谢所有帮助!

谢谢!

斯蒂芬

1 个答案:

答案 0 :(得分:1)

您将无法使用内置编辑功能,但您可以使用TemplateField在编辑模式下加载列来实现此目的:

<asp:GridView ID="GridView1" runat="server" OnRowCommand="GridView1_RowCommand" ...>    
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("SomeColumn") %>' />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField DataField="SomeOtherColumn" HeaderText="Foo" />
        ...
        <asp:TemplateField>
            <ItemTemplate>
                <asp:Button ID="Button1" runat="server" CommandName="Update" CommandArgument='<%# Container.ItemIndex %>' />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

代码隐藏:

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
    GridViewRow row = GridView1.Rows[(int)e.CommandArgument];
    if (row != null)
    {
        TextBox txt = row.FindControl("TextBox1") as TextBox;
        if (txt != null)
        {
            //get the value from the textbox
            string value = txt.Text;
        }
    }
}

编辑:将一个按钮放在GridView之外,你会像这样更新:

<asp:GridView>
    ...
</asp:GridView>
<asp:Button ID="Button1" runat="server" Text="Update" OnClick="Button1_Click" />

代码隐藏:

protected void Button1_Click(object sender, EventArgs e)
{
    foreach (GridViewRow row in GridView1.Rows)
    {
        TextBox txt = row.FindControl("TextBox1") as TextBox;
        if (txt != null)
        {
            //get the value from the textbox
            string value = txt.Text;
        }
    }
}