2

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

带有更新按钮的 GridView

如果可能的话,我想做的是在右侧两列中添加一个按钮(我已经在停靠时间列中添加了一个),如果设置了该列或将当前时间设置为该列,则该按钮将不可见. 为这两列设置时间已经通过更新表单处理,但我的主管要求我尝试看看这是否可能。

这两个时间列是模板字段(因为我根据数据库中的实际时间格式化显示时间),并且我在 ItemTemplate 中为图片中的设置按钮添加了一个 asp 按钮。

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

任何投入将不胜感激。感谢您的时间。

4

1 回答 1

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事件中更新网格后,您应该重新填充网格数据以呈现更改

于 2012-06-19T22:00:01.300 回答