我需要为gridview创建多个操作 - 例如,“Approve”,“Deny”和“Return”。
我可以通过为每个操作创建一个按钮字段来完成此操作:
<asp:ButtonField ButtonType="Link" CommandName="Approve" Text="Approve" />
<asp:ButtonField ButtonType="Link" CommandName="Deny" Text="Deny />
<asp:ButtonField ButtonType="Link" CommandName="Return" Text="Deny" />
但是,这会为每个按钮创建一列。
有没有办法拥有相同的功能,但是将它们合并为一个列?
答案 0 :(得分:9)
您是否考虑过使用TemplateField
?这是一个例子:
<asp:GridView ID="grdTest" runat="server">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton ID="btnApprove" runat="server" CommandName="Approve" Text="Approve" />
<asp:LinkButton ID="btnDeny" runat="server" CommandName="Deny" Text="Deny" />
<asp:LinkButton ID="btnReturn" runat="server" CommandName="Return" Text="Return" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
然后,您可以使用OnRowCommand
完全相同的方式捕获命令,或者执行任何您喜欢的操作。您可以完全控制它以满足您的需要,而不受使用常规预定义列类型的内置功能的约束。
答案 1 :(得分:3)
尝试将按钮放入<asp:TemplateField>
而不是:
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton CommandName="Approve" Text="Approve" />
<asp:LinkButton CommandName="Deny" Text="Deny />
<asp:LinkButton CommandName="Return" Text="Deny" />
</ItemTemplate>
</asp:TemplateField>
答案 2 :(得分:3)
解决方案不是使用ButtonField元素。
要完成您想要的操作,您需要创建一个列TemplateField
,并在<asp:Button id="myButton" />
的{{1}}或TemplateField
内将按钮定义为常规ASP.NET ItemTemplate
{1}}适用于您的用户界面。
您可以在EditItemTemplate
处理程序中处理Click事件,您可以在其中检查GridView_OnItemCommand()
以确切了解导致事件的按钮。