隐藏EmptyDataTemplate但保持标题可见

时间:2017-01-13 13:10:01

标签: asp.net

我的ASP.NET webform上有一个EmptyDataTemplate,允许用户将记录添加到数据库中。根据用户的权限,如果没有找到数据,则需要显示和隐藏此EmptyDataTemplate(我有这个工作!) 例如,我的用户只有读取权限。当他们搜索特定条件时,没有显示结果,他们无法看到EmptyDataTemplate。但是,如果他们搜索条件并且有数据,则显示数据而不显示标题。

有人可以帮助解释为什么会发生这种情况以及是否有解决方法?

标题是TemplateFields上的HeaderText。

我希望这是一个普通的技巧。 预先感谢您的帮助! 请注意,它是我想要显示的TemplateFields中的HeaderText,而不是emptyDataTemplate中的HeaderText,因为它们会抬起与搜索条件匹配的数据列。

编辑:按要求添加代码 用于隐藏EmptyDataTemplate:

     protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        Control control = null;
        control = GridView1.Controls[0].Controls[0];

        if (userManagement.getMIFReadWriteAccess() == "Read")
        {
            control.Visible = false;
            Export_All.Visible = true;
        }
        else if (userManagement.getMIFReadWriteAccess() == "Write")
        {
            control.Visible = true;
            Export_All.Visible = true;
        }
}
标题文本的标记中的

(我只显示了一列但所有标记的标记相同)

<asp:TemplateField HeaderText="ID">
                            <ItemTemplate>
                                <asp:Label ID="lbl_Index" runat="server" Text='<%#Eval("id") %>'></asp:Label>

                                <asp:Label ID="lbl_ID" runat="server" Text="" Visible="false"></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>

EmptyDataTemplate:

    <EmptyDataTemplate>
                           <div id="emptyData" runat="server">
                             <tr>
                              <th></th>
                                <th>Serial Number</th>
                                <th>Comments</th>
                                <th>Review Date</th>
                                <th>Approved By</th>
                            </tr>
                            <tr>
                                 <td>
                                    <asp:Button runat="server" ID="btInsert" Text="In" OnClick="Add" CommandName="EmptyDataTemplate" Class="Button" OnClientClick="return confirm('You are about to confirm this action. Please confirm this action by clicking OK. If you do not wish to do this, please select Cancel.');" />
                                    <br />
                                    <asp:Button runat="server" ID="btInsertOut" Text="Out" OnClick="AddOut" CommandName="EmptyDataTemplate" Class="Button" OnClientClick="return confirm('You are about to confirm this action. Please confirm this action by clicking OK. If you do not wish to do this, please select Cancel.');" />
                                </td>
                                <td>
                                    <asp:TextBox runat="server" ID="tb_Serial_Number" CssClass="text"></asp:TextBox>
                               </td>
                                <td>
                                     <asp:TextBox ID="tb_comments" Width="100%" MaxLength="50" runat="server" placeholder="max 50 characters"/>
                                </td>
                                <td>
                                   <asp:TextBox ID="tb_reviewDate" runat="server" DataFormatString="{0:dd/mm/yyyy}"  Text='<%#Eval("review_by") %>'></asp:TextBox>
                                </td>
                                <td><asp:DropDownList ID="tb_approved_by" runat="server">                    
                    </asp:DropDownList> </td>
                            </tr>
</div>

                        </EmptyDataTemplate>

1 个答案:

答案 0 :(得分:0)

经过反复试验,我发现以编程方式在C#中添加标题行就可以了。可能不是最好的方式,但它有效。

代码如下:

#region show the emptyDataTemplate depending on user rights

    Control control = null;
    control = GridView1.Controls[0].Controls[0];

    if (userManagement.getMIFReadWriteAccess() == "Read")
    {
        control.Visible = false;
        GridViewRow HeaderRow = new GridViewRow(1, 0, DataControlRowType.Header, DataControlRowState.Insert); 

        TableCell HeaderCell2 = new TableCell();
        HeaderCell2.Text = "Country";
        HeaderCell2.ColumnSpan = 1;
        HeaderRow.Cells.Add(HeaderCell2);

        //Repeat the above for every column of data you have!

        GridView1.Controls[0].Controls.AddAt(0, HeaderRow);