【问题标题】:If you're using a generic DataGrid, is there a way to hide specific fields?如果您使用的是通用 DataGrid,有没有办法隐藏特定字段?
【发布时间】:2016-12-21 19:32:00
【问题描述】:

我有一些这样的代码:

asp.net

<div id="divGrid" style='width:920px; height:430px; overflow:auto'>
    <asp:DataGrid ID="DataGrid_AuditSearch" runat="server"
    AllowPaging="True" AllowSorting="True" CellPadding="4" ForeColor="#333333" GridLines="None"
    OnCancelCommand="DataGrid_AuditSearch_CancelCommand" 
    OnUpdateCommand="DataGrid_AuditSearch_UpdateCommand" 
    OnEditCommand="DataGrid_AuditSearch_EditCommand">
        <AlternatingItemStyle Font-Bold="False" Font-Italic="False" 
           Font-Overline="False" Font-Strikeout="False" Font-Underline="False" />
        <EditItemStyle BackColor="#999999" Font-Bold="False" Font-Italic="False" 
           Font-Overline="False" Font-Strikeout="False" Font-Underline="False" />
        <FooterStyle BackColor="#5D7B9D" Font-Bold="False" Font-Italic="False" 
           Font-Overline="False" Font-Strikeout="False" Font-Underline="False" />
        <HeaderStyle BackColor="#5D7B9D" Font-Bold="False" Font-Italic="False" 
           Font-Overline="False" Font-Strikeout="False" Font-Underline="False" />
        <PagerStyle BackColor="#5D7B9D" Font-Bold="False" Font-Italic="False" 
           Font-Overline="False" Font-Strikeout="False" Font-Underline="False" />
        <SelectedItemStyle BackColor="#E2DED6" Font-Bold="False" Font-Italic="False" 
           Font-Overline="False" Font-Strikeout="False" Font-Underline="False" />
        <Columns>
            <asp:EditCommandColumn ButtonType="PushButton" CancelText="Cancel" 
               EditText="Select" UpdateText="Update"></asp:EditCommandColumn>
        </Columns>

    </asp:DataGrid>
    <asp:Label ID="lblEmpty" runat="server" Visible="false" Style="font-weight:bold; font-size:large;"></asp:Label>
</div> 

C#:

public void Show_Data(int AuditID)
{
    try
    {
        OracleConnection conn = GetConnection();
        {
            conn.ConnectionString = ConfigurationManager.ConnectionStrings["ConnCST"].ToString();

            OracleCommand cmd3 = new OracleCommand();
            cmd3.Connection = conn;

            sqlquery2 = "SELECT * from MyTable";

            cmd3.CommandText = sqlquery2;

            var SearchAdapter = new OracleDataAdapter(cmd3);
            var ds = new DataSet();
            SearchAdapter.Fill(ds);

            // Perform the binding.
            DataGrid_AuditSearch.DataSource = ds;
            DataGrid_AuditSearch.DataBind();

            if (DataGrid_AuditSearch.Items.Count < 1)
            {
                lblEmpty.Visible = true;
                lblEmpty.Text = "There is no data to display";
            }
            else
            {
                lblEmpty.Visible = false;
            }

            //DataGrid_AuditSearch.Columns[3].Visible = false;
            //DataGrid_AuditSearch.Columns[1].Visible = false;
        }
    }
    catch (Exception ex)
    {
        Response.Write(ex.Message);
    }

}

相当无聊,通用的东西。所有字段都是基于绑定生成的。

但是,我希望能够访问 2 个字段(因为我需要数据),但我不想在屏幕上显示。有没有办法“动态地”做到这一点?在那里,我不想明确命名我想要显示的所有字段以及按什么顺序显示。

我尝试在 DataBind 命令之后添加它,但它没有做任何事情:

DataGrid_AuditSearch.Columns[3].Visible = false;
DataGrid_AuditSearch.Columns[1].Visible = false;

【问题讨论】:

  • 您没有任何要隐藏的列,除了 EditCommandColumn,它是 DataGrid_AuditSearch.Columns[0].Visible = false;
  • 嗯,这不是真的。当我运行该代码时,会显示 7 个字段。 EditCommandColumn 是一个按钮,网格也有从数据适配器引入的 6 个字段。 是的,这就是我用来填充它的所有代码。
  • 显示创建列的代码。
  • 就是所有代码。在 C# 应用程序中弹出它并自行测试。我从未在数据网格中指定了列。好吧,有一次我在使用 Net Advantage 工具,但从来没有在使用 VS 数据网格时。
  • 好的,我编辑了它。就是这样。它在 Page_Load 上调用。

标签: c# asp.net datagrid


【解决方案1】:

自动生成的列不会添加到 Columns 集合中,因此它们不能用于设置属性。更好的方法是以声明方式创建列并在 DataGrid 的 PreRender 或 Load 事件中访问它们。 (我确实运行了您的代码并为自己进行了测试)。

这是一篇关于创建 DataGrid 列的精彩文章:https://msdn.microsoft.com/en-us/library/aa479316.aspx

【讨论】:

    猜你喜欢
    • 2011-04-29
    • 1970-01-01
    • 1970-01-01
    • 2012-07-04
    • 1970-01-01
    • 2021-11-02
    • 2019-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多