【问题标题】:Wpf Datagrid not show one column while bindingWpf Datagrid在绑定时不显示一列
【发布时间】:2014-02-09 04:37:29
【问题描述】:

尝试在 WPF 中绑定 DataTable 时,DataGrid 中未显示 第一列 值。

Code

private DataTable _dt;

public DataTable DataTable
{
    get { return _dt; }
    set { _dt = value; }
}

public Controls()
{
    InitializeComponent();

    _dt = new DataTable("Table");
    _dt.Columns.Add("S.No");
    _dt.Columns.Add("Name");

    for (int i = 1; i <= 10; i++)
    {
        _dt.Rows.Add(""+i, "Name "+ i);
    }

    dataGrid1.DataContext = _dt;                
}

XAML

<DataGrid AutoGenerateColumns="True"
          Height="131" 
          ItemsSource="{Binding}"
          HorizontalAlignment="Left"              
          Name="dataGrid1" 
          VerticalAlignment="Top" 
          Width="359" />

【问题讨论】:

    标签: c# wpf xaml datagrid datatable


    【解决方案1】:

    列名不能包含点或空格字符,DataBinding 不支持列名中的点。这不会全面工作,不仅在 DataGrid AutoGenerateColumns 中,而且在绑定系统中的任何地方。

    尝试将S.No 更改为仅读取No,如下代码所示:

    _dt = new DataTable("Table");
    _dt.Columns.Add("No");
    _dt.Columns.Add("Name");
    
    DataRow dr = _dt.NewRow();
    
    for (int i = 1; i <= 10; i++)
    {
        _dt.Rows.Add(""+i, "Name "+ i);                
    }
    
    dataGrid1.DataContext = _dt;
    

    【讨论】:

    • 您的信息有点错误,DataGrid 列名接受点字符 - 请参阅 OP 屏幕简短。但问题是列数据绑定。这就是为什么我建议更改上一个答案中的列名。更改您的信息,因为它会混淆 OP 和其他人。
    • @RajaRaja Cholan:是的,点可以在列名,我自己试过,只是WPF DataBinding 引擎不支持DataColumn 名称中的点。我将编辑我的答案以使其更清晰。谢谢。
    • 太好了,我给 +1 一个完整的解决方案。 :-)
    • 这同样适用于使用“/”字符(例如,“日期/时间”不能用作列名。请改用“日期时间”)。
    【解决方案2】:

    _dt.Columns.Add("S.No"); 替换为_dt.Columns.Add("S_No");_dt.Columns.Add("S-No");

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-23
      • 2017-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-19
      • 1970-01-01
      相关资源
      最近更新 更多