积极答复者
还是GridView的删除问题

问题
-
有两个需求:
1. 希望删除和编辑选项有条件出现(仅对高级别用户出现)
2. 点删除之前希望能弹出对话框提醒用户确认
关于第二点,我查了一些资料,将commandfield的列先转为templatefield,然后将相关代码改为:
<asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True"
AutoGenerateColumns="False" BackColor="White" BorderColor="White" BorderStyle="Ridge"
BorderWidth="2px" CellPadding="3" CellSpacing="1" DataKeyNames="ID" DataSourceID="SqlDataSource1"
GridLines="None" Width="900px">
<FooterStyle BackColor="#C6C3C6" ForeColor="Black" />
<RowStyle BackColor="#DEDFDE" ForeColor="Black" />
<Columns>
<asp:TemplateField ShowHeader="True">
<EditItemTemplate>
<asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="True" CommandName="Update"
Text="更新"></asp:LinkButton>
<asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" CommandName="Cancel"
Text="取消"></asp:LinkButton>
</EditItemTemplate>
<ItemTemplate>
<asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" CommandName="Edit"
Text="编辑"></asp:LinkButton>
<asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" CommandName="Delete"
Text="删除" OnClientClick="return confirm('确认要删除吗?')"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="ID" HeaderText="编号" InsertVisible="False" ReadOnly="True"
SortExpression="ID" />
<asp:BoundField DataField="Topic" HeaderText="标题" SortExpression="Topic" />
<asp:BoundField DataField="Author" HeaderText="作者" SortExpression="Author" />
<asp:BoundField DataField="CreationDate" HeaderText="发表/修改时间" SortExpression="CreationDate" />
</Columns>
<PagerStyle BackColor="#C6C3C6" ForeColor="Black" HorizontalAlign="Right" />
<SelectedRowStyle BackColor="#9471DE" Font-Bold="True" ForeColor="White" />
<HeaderStyle BackColor="#4A3C8C" Font-Bold="True" ForeColor="#E7E7FF" />
</asp:GridView>
发现并没有起作用,包括删除、编辑的Text属性修改也没用。
请高手指教,谢谢!
答案
-
1 在 RowDataBound 事件中判断,指定你需要的按钮或列不可见。
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { bool adv = false;//高级用户 if (!adv) { // 指定某些按钮不可见 //LinkButton deleteButton = (LinkButton)e.Row.FindControl("LinkButton2"); //if (deleteButton != null) // deleteButton.Visible = false; // 指定某些列不可见 this.GridView1.Columns[3].Visible = false; } }
2 如果你说的没有起作用是指,没有弹出确认对话框的话。你的写法是可以的,需要点击删除与更新才会提示哦。<asp:TemplateField ShowHeader="True"><EditItemTemplate><asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="True" CommandName="Update"Text="更新" OnClientClick="return confirm('确认要更新吗?');" ></asp:LinkButton><asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" CommandName="Cancel"Text="取消"></asp:LinkButton></EditItemTemplate><ItemTemplate><asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" CommandName="Edit"Text="编辑"></asp:LinkButton><asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" CommandName="Delete"Text="删除" OnClientClick="return confirm('确认要删除吗?');"></asp:LinkButton></ItemTemplate></asp:TemplateField>
知识改变命运,奋斗成就人生!- 已建议为答案 jack15850798154 2010年1月30日 9:24
- 已标记为答案 KeFang Chen 2010年2月5日 2:39
全部回复
-
1 在 RowDataBound 事件中判断,指定你需要的按钮或列不可见。
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { bool adv = false;//高级用户 if (!adv) { // 指定某些按钮不可见 //LinkButton deleteButton = (LinkButton)e.Row.FindControl("LinkButton2"); //if (deleteButton != null) // deleteButton.Visible = false; // 指定某些列不可见 this.GridView1.Columns[3].Visible = false; } }
2 如果你说的没有起作用是指,没有弹出确认对话框的话。你的写法是可以的,需要点击删除与更新才会提示哦。<asp:TemplateField ShowHeader="True"><EditItemTemplate><asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="True" CommandName="Update"Text="更新" OnClientClick="return confirm('确认要更新吗?');" ></asp:LinkButton><asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" CommandName="Cancel"Text="取消"></asp:LinkButton></EditItemTemplate><ItemTemplate><asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" CommandName="Edit"Text="编辑"></asp:LinkButton><asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" CommandName="Delete"Text="删除" OnClientClick="return confirm('确认要删除吗?');"></asp:LinkButton></ItemTemplate></asp:TemplateField>
知识改变命运,奋斗成就人生!- 已建议为答案 jack15850798154 2010年1月30日 9:24
- 已标记为答案 KeFang Chen 2010年2月5日 2:39
-
1:关于第一个问题我不明白你具体要怎么去控制显示,但可以考虑转成模版列,在gridview的rowDatabound事件中 通过FindControl()方法找到这两个控件进行控制!
2:关于第二个问题,你的那种写法我听别人网友说那样写,我也试过,但没效果,我估计应该是客户端事件已经执行了,但是因为gridview的回绑事件太快所以无法看到效果,我提供一种方法:
转成模版列,在gridview的rowDatabound事件中 通过FindControl()方法找到控件并转成LinkButton后通过其Attribites.add方法添加事件;下附代码:
((LinkButton)e.Row.FindControl("LinkButton1")).Attributes.Add("onclick","return confirm('确定要删除吗?')");