ASP.NET Gridview Templatefield包含多个项目

时间:2012-06-19 21:52:30

标签: asp.net vb.net gridview

我在ASP.net/VB.NET中创建一个Web应用程序,我遇到了GridView控件的问题。 目前,我已经使用来自数据库的数据填充了GridView,并且我还编写了更新按钮,以允许用户通过弹出的表单编辑任何必要的信息。

GridView with update buttons

我想做的是,如果可能的话,在右边两列添加一个按钮(我已经在Dock Out Time列中放了一个),如果设置了列,它将不可见,或者设置当前时间到专栏。设置这两列的时间已经通过更新表单处理,但是我的主管让我试着看看是否可能。

这两个Time列是TemplateFields(因为我从DB中的实际格式中显示了显示时间),并且我在ItemTemplate中为图片中的Set Button添加了一个asp按钮。

这甚至可以做到,如果是这样,我将如何在后面的代码中访问此按钮,以便我可以添加功能(如果列不为空则设置时间并隐藏它)如果真的不可能有两个在TemplateField中这样的项目我可以为这些按钮添加2个额外的列,但我认为这样看起来会更清晰。

任何输入都将不胜感激。谢谢你的时间。

1 个答案:

答案 0 :(得分:4)

是的,这是可能的,请查看以下答案:

https://stackoverflow.com/a/11077709/1268570

基本上你需要从网格中处理RowCommand事件并用命令识别每个按钮,可选择在绑定时为每个按钮添加参数,例如:

<asp:GridView runat="server" OnRowCommand="grdProducts_RowCommand" 
    ID="grdProducts">
    <Columns>
        <asp:TemplateField ShowHeader="False">
            <ItemTemplate>
                <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="false" 
                    CommandName="myLink" CommandArgument='<%# DataBinder.Eval(Container, "RowIndex") %>' Text="Button"></asp:LinkButton>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:CommandField ShowEditButton="True" />
    </Columns>
</asp:GridView>

在代码背后:

    protected void grdProducts_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        switch (e.CommandName)
        {
            case "myLink":
                this.lblMessage.Text = e.CommandName + " " + e.CommandArgument + " " + DateTime.Now.ToString();

                // referenece to the current row
                var row = this.grdProducts.Rows[int.Parse(e.CommandArgument.ToString())];
                break;
            default:
                break;
        }
    }

RowCommand事件中更新网格后,您应该重新填充网格数据以呈现更改