我在ASP.net/VB.NET中创建一个Web应用程序,我遇到了GridView控件的问题。 目前,我已经使用来自数据库的数据填充了GridView,并且我还编写了更新按钮,以允许用户通过弹出的表单编辑任何必要的信息。
我想做的是,如果可能的话,在右边两列添加一个按钮(我已经在Dock Out Time列中放了一个),如果设置了列,它将不可见,或者设置当前时间到专栏。设置这两列的时间已经通过更新表单处理,但是我的主管让我试着看看是否可能。
这两个Time列是TemplateFields(因为我从DB中的实际格式中显示了显示时间),并且我在ItemTemplate中为图片中的Set Button添加了一个asp按钮。
这甚至可以做到,如果是这样,我将如何在后面的代码中访问此按钮,以便我可以添加功能(如果列不为空则设置时间并隐藏它)如果真的不可能有两个在TemplateField中这样的项目我可以为这些按钮添加2个额外的列,但我认为这样看起来会更清晰。
任何输入都将不胜感激。谢谢你的时间。
答案 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
事件中更新网格后,您应该重新填充网格数据以呈现更改