none
还是GridView的删除问题 RRS feed

  • 问题

  • 有两个需求:
    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属性修改也没用。

    请高手指教,谢谢!

    2010年1月30日 6:38

答案

  • 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>

    知识改变命运,奋斗成就人生!
    2010年1月30日 7:20
    版主

全部回复

  • 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>

    知识改变命运,奋斗成就人生!
    2010年1月30日 7:20
    版主
  • 你先查看浏览器 里面 查看源码 有没有代码 如果一行都没有 那你这个项目配置文件web.config出问题了 你可以删除这个文件web.config 再新建这个文件web.config即可

    2010年1月30日 7:39
  • 1:关于第一个问题我不明白你具体要怎么去控制显示,但可以考虑转成模版列,在gridview的rowDatabound事件中 通过FindControl()方法找到这两个控件进行控制!
    2:关于第二个问题,你的那种写法我听别人网友说那样写,我也试过,但没效果,我估计应该是客户端事件已经执行了,但是因为gridview的回绑事件太快所以无法看到效果,我提供一种方法:
    转成模版列,在gridview的rowDatabound事件中 通过FindControl()方法找到控件并转成LinkButton后通过其Attribites.add方法添加事件;下附代码:
    ((LinkButton)e.Row.FindControl("LinkButton1")).Attributes.Add("onclick","return confirm('确定要删除吗?')");

    2010年2月8日 6:47