c# - 如何在 DataGrid 中隐藏自动生成的列?

标签 c# wpf xaml datagrid

我已经从 SQL 服务器的 DataTable 自动填充了 DataGrid。我希望用户能够添加或删除哪些列是可见的。我最初试过这个:

    public void populateTaskTable(DataTable dt)
    {                    
        //add the whole datatable to the datagrid
        dg.DataContext = dt.DefaultView;

        dg.Columns[0].Visibility = Visibility.Collapsed;
    }

对于相应的 xaml(我已经尝试过使用和不使用 AutoGenerateColumns="True"

           <DataGrid Name="dg" ItemsSource="{Binding}" AutoGenerateColumns="True" 

                    <!-- <DataGrid.Columns></DataGrid.Columns> -->

            </DataGrid>

这导致内存违规中断。于是我做了

MessageBox.Show(dg.Columns.Count());

为了查看 Columns 是否被填充,它没有被填充,它输出 0,即使我可以在程序中看到这些列。

我发现了 from this previous stackoverflow question “自动生成的列不会添加到列索引”。

然后 from this question我尝试更新 DataGrid 以像这样填充列

   taskTable.UpdateLayout();

   taskTable.Items.Refresh();

什么都没做。

有没有办法访问自动生成的 DataGrid 的属性,或者有没有办法将 DataGrid 的所有列添加到 Columns 组件?

提前致谢。

最佳答案

连接AutoGeneratingColumn事件并隐藏那边的列。

dataGrid.AutoGeneratingColumn += dataGrid_AutoGeneratingColumn;

void dataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
    e.Column.Visibility = Visibility.Collapsed;
}

你可能需要有条件地隐藏列,你可以使用

private void DataGrid_OnAutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
    if (e.PropertyName == "YourProperty")
    {
        e.Column.Visibility = Visibility.Collapsed;
    }
}

或者您可以使用 AutoGeneratedColumns事件。生成所有列后将触发它。

dataGrid.AutoGeneratedColumns += DataGrid1_AutoGeneratedColumns;

void DataGrid1_AutoGeneratedColumns(object sender, EventArgs e)
{
     int columnsCount = DataGrid1.Columns.Count;
     //You can access the columns here.
}

您提到的链接说自动生成的列没有添加到列集合中。我只是注意到自动生成的列确实添加到集合中了。它是链接到 System.Web.UI.WebControls.DataGrid 文档的糟糕答案是非常错误的。

关于c# - 如何在 DataGrid 中隐藏自动生成的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27927093/

相关文章:

c# - 最后,是什么触发了捕获变量的新实例?

c# - WCF RESTFul 服务 - 404 端点未找到 2 个服务

c# - 如何测试使用 BackgroundWorker 加载的 ViewModel?

c# - 旋转一个矩形

c# - 如何正确使用 ToggleButton.IsChecked 或 IsPressed 上的触发器?

c# - 翻译在 C# 中使用 Active Directory 的 VB

c# - Windows 窗体中的控件不显示工具提示气球

c# - 如何获得运行或段落的高度

c# - 清除页面在 WP8 中使用的内存

c# - 获取设置为自动的网格的实际宽度