如果您使用的是通用DataGrid,有没有办法隐藏特定字段?

时间:2016-12-21 19:32:00

标签: c# asp.net datagrid

我有一些这样的代码:

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;

1 个答案:

答案 0 :(得分:0)

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

以下是有关创建DataGrid列的精彩文章:https://msdn.microsoft.com/en-us/library/aa479316.aspx