如何在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" <!-- -->
这导致内存违规中断。 所以我做到了
MessageBox.Show(dg.Columns.Count());
要查看列是否正在填充,它不是,它输出0
即使我可以看到程序中的列。
我从之前的stackoverflow问题中发现“自动生成的列未添加到列索引”。
然后从这个问题我尝试更新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. }
您引用的链接表示自动生成的列未添加到Columns集合中。 我刚刚注意到自动生成的列确实已添加到集合中。 链接到System.Web.UI.WebControls.DataGrid
文档的答案很差,这是非常错误的。
我的解决方案是使用静态方法,您传入网格和列名列表,如下所示:
public static void CollapseGridColumns(DataGrid grid, List
columnNames) { foreach (var column in grid.Columns) { foreach(string columnName in columnNames) { if (column.Header.ToString().ToLower() == columnName.ToLower()) { column.Visibility = Visibility.Collapsed; break; } } } }