【问题标题】:Show ButtonField of gridview dynamically动态显示gridview的ButtonField
【发布时间】:2015-12-07 12:26:45
【问题描述】:

我有一个 gridview,它有一列我想动态显示它: 如果 IsExpert 或 IsAgent 等于 true 则显示它,否则不显示它并且我不想使用 RowBoundData。(IsExpert 和 IsAgent 是服务器端属性)

我的代码:

<asp:GridView ID="grvTicketList" runat="server" AllowPaging="True" AutoGenerateColumns="False" CssClass="table half table-hover table-mc-light-blue" GridLines="None"
EmptyDataText="تیکتی موجود نیست" OnPageIndexChanging="grvTicketList_PageIndexChanging" PagerStyle-BackColor="White"
PagerStyle-ForeColor="Black" OnRowCommand="grvTicketList_RowCommand" >
<Columns>

    <asp:BoundField DataField="TicketID" ReadOnly="true" HeaderText="شماره تیکت" />
    <asp:BoundField DataField="CurrentStateId" ReadOnly="true" HeaderText="شماره مرحله فعلی تیکت" />
    <asp:BoundField DataField="TrackingCode" ReadOnly="true" HeaderText="کد رهگیری" />
    <asp:BoundField DataField="ServiceName" ReadOnly="true" HeaderText="نام خدمت" />
    <asp:BoundField DataField="SubServiceName" ReadOnly="true" HeaderText=" نام زیر خدمت" />
    <asp:BoundField DataField="strTicketDate" HeaderText="زمان ثبت تیکت" />
    <asp:BoundField DataField="CustomerName" HeaderText=" نام و نام خانوادگی مشتری" />
    <asp:BoundField DataField="StateName" HeaderText="وضعیت تیکت" />
    <asp:BoundField DataField="UserName" HeaderText="نام ثبت کننده تیکت" />

    <asp:ButtonField Text="بازخورد" CommandName="FeedBack" ButtonType="Link" >
        <ItemStyle ForeColor="#003399" />
    </asp:ButtonField>

</Columns>

<PagerStyle BackColor="White" ForeColor="Black"></PagerStyle>

【问题讨论】:

  • 为什么不RowDataBound
  • 我假设 IsExpert 和 IsAgent 是您代码中的一个属性。为什么不在Page_Load中隐藏gridview,否则使用Jquery。
  • @Zaki 是的! IsExpert 和 IsAgent 是属性(布尔类型),但我需要服务器代码。并且想要可见或不可见的 ButtonField 列
  • @MattMurdock 因为我有另一个事件导致页面回发后 RowDataBound 上的更改消失

标签: c# asp.net gridview


【解决方案1】:

在页面加载中

if(IsExpert || IsAgent)
    GridView1.Columns[9].Visible=true;
 else
    GridView1.Columns[9].Visible=false;

【讨论】:

  • 谢谢.. 但是 'IsExpert' 或 'IsAgent' 是服务器端属性(bool 类型)
【解决方案2】:

我更喜欢使用代码隐藏而不是使用 aspx,例如 Page_LoadDataBound。请注意,DataBound 只触发一次,而 RowDataBound 则每行触发一次:

代码隐藏:

protected void GrvTicketList_DataBound(Object sender, EventArgs e)
{
    GridView grid = (GridView)sender;
    grid.Columns[9].Visible = IsExpert || IsAgent;
}

aspx(添加事件处理程序):

<asp:GridView ID="grvTicketList" OnDataBound="GrvTicketList_DataBound" runat="server" AllowPaging="True" AutoGenerateColumns="False" CssClass="table half table-hover table-mc-light-blue" GridLines="None"
EmptyDataText="تیکتی موجود نیست" OnPageIndexChanging="grvTicketList_PageIndexChanging" PagerStyle-BackColor="White"
PagerStyle-ForeColor="Black" OnRowCommand="grvTicketList_RowCommand" >
<Columns>

    <asp:BoundField DataField="TicketID" ReadOnly="true" HeaderText="شماره تیکت" />
    <asp:BoundField DataField="CurrentStateId" ReadOnly="true" HeaderText="شماره مرحله فعلی تیکت" />
    <asp:BoundField DataField="TrackingCode" ReadOnly="true" HeaderText="کد رهگیری" />
    <asp:BoundField DataField="ServiceName" ReadOnly="true" HeaderText="نام خدمت" />
    <asp:BoundField DataField="SubServiceName" ReadOnly="true" HeaderText=" نام زیر خدمت" />
    <asp:BoundField DataField="strTicketDate" HeaderText="زمان ثبت تیکت" />
    <asp:BoundField DataField="CustomerName" HeaderText=" نام و نام خانوادگی مشتری" />
    <asp:BoundField DataField="StateName" HeaderText="وضعیت تیکت" />
    <asp:BoundField DataField="UserName" HeaderText="نام ثبت کننده تیکت" />

    <asp:ButtonField Text="بازخورد" CommandName="FeedBack" ButtonType="Link" >
        <ItemStyle ForeColor="#003399" />
    </asp:ButtonField>

</Columns>

【讨论】:

    猜你喜欢
    • 2018-03-10
    • 1970-01-01
    • 2011-11-27
    • 2012-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-01
    • 2010-10-03
    相关资源
    最近更新 更多