Cha*_*ton 5 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;
}
Run Code Online (Sandbox Code Playgroud)
对于相应的xaml(我已经尝试了有和没有 AutoGenerateColumns="True"
<DataGrid Name="dg" ItemsSource="{Binding}" AutoGenerateColumns="True"
<!-- <DataGrid.Columns></DataGrid.Columns> -->
</DataGrid>
Run Code Online (Sandbox Code Playgroud)
这导致内存违规中断.所以我做到了
MessageBox.Show(dg.Columns.Count());
Run Code Online (Sandbox Code Playgroud)
要查看列是否正在填充,它不是,它输出一个,0即使我可以看到程序中的列.
我从之前的stackoverflow问题中发现"自动生成的列未添加到列索引".
然后从这个问题我尝试更新DataGrid以获得像这样填充的列
taskTable.UpdateLayout();
Run Code Online (Sandbox Code Playgroud)
和
taskTable.Items.Refresh();
Run Code Online (Sandbox Code Playgroud)
哪个什么都没做.
有没有办法访问自动生成的DataGrid的属性,或者是将DataGrid的所有列添加到Columns组件的方法?
提前致谢.
连接AutoGeneratingColumn事件并在其上隐藏列.
dataGrid.AutoGeneratingColumn += dataGrid_AutoGeneratingColumn;
void dataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
e.Column.Visibility = Visibility.Collapsed;
}
Run Code Online (Sandbox Code Playgroud)
您可能需要有条件地隐藏列,您可以使用
private void DataGrid_OnAutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
if (e.PropertyName == "YourProperty")
{
e.Column.Visibility = Visibility.Collapsed;
}
}
Run Code Online (Sandbox Code Playgroud)
或者您可以使用AutoGeneratedColumns事件.生成所有列时将触发它.
dataGrid.AutoGeneratedColumns += DataGrid1_AutoGeneratedColumns;
void DataGrid1_AutoGeneratedColumns(object sender, EventArgs e)
{
int columnsCount = DataGrid1.Columns.Count;
//You can access the columns here.
}
Run Code Online (Sandbox Code Playgroud)
您引用的链接表示自动生成的列未添加到Columns集合中.我刚刚注意到自动生成的列确实已添加到集合中.链接到文档System.Web.UI.WebControls.DataGrid非常错误的答案很差.
| 归档时间: |
|
| 查看次数: |
1849 次 |
| 最近记录: |