Excel教程Excel函数Excel透视表Excel电子表格Excel实用技巧Excel2010高效办公office2010Excel视频教程

[解决方案1]:

如果您需要动态列,则应始终使用 DataTable 作为数据源。这样您就可以避免在 C#/code-behind 中显式构建 DataGrid,而是使用自动生成功能。

示例中使用的两个辅助方法 AddColumn 和 AddRow 可以作为 DataTable 上的扩展方法实现。

MainWindow.xaml.cs

private void OnSendButtonClick(object sender, EventArgs e)
{
  var dataGridSource = new DataTable();
  AddColumn(dataGridSource, "type");
  foreach (char character in this.TextInput.Text)
  {
    AddColumn(dataGridSource, character.ToString());
  }
  // Generate 2 rows of pseudo data
  var doubleGenerator = new Random();
  for (int rowIndex = 0; rowIndex < 2; rowIndex++)
  {
    var columnValues = new List();

    columnValues.Add(rowIndex < 1 ? "x" : "y");
    for (int columnIndex = 0; columnIndex < dataGridSource.Columns.Count; columnIndex++)
    {
      columnValues.Add(doubleGenerator.NextDouble());
    }
    AddRow(dataGridSource, columnValues);
  }
  this.Table.ItemsSource = dataGridSource.DefaultView;
}
private void AddColumn(DataTable dataTable, string columnName, int columnIndex = -1)
{
  DataColumn newColumn = new DataColumn(columnName, typeof(TData));
  dataTable.Columns.Add(newColumn);
  if (columnIndex > -1)
  {

    newColumn.SetOrdinal(columnIndex);
  }
  int newColumnIndex = dataTable.Columns.IndexOf(newColumn);
  // Initialize existing rows with default value for the new column
  foreach (DataRow row in dataTable.Rows)
  {
    row[newColumnIndex] = default(TData);
  }
}
private void AddRow(DataTable dataTable, IList columnValues)
{
  DataRow rowModelWithCurrentColumns = dataTable.NewRow();
  dataTable.Rows.Add(rowModelWithCurrentColumns);
  for (int columnIndex = 0; columnIndex 
  {
    rowModelWithCurrentColumns[columnIndex] = columnValues[columnIndex];
  }
}

MainWindow.xaml


  
    
    

【讨论】:

[解决方案2]:

(代码隐藏)

//clear rows & columns
DataGrid.Items.Clear();
DataGrid.Columns.Clear();
//add type Column
DataGridTextColumn typeColumn = new DataGridTextColumn();
typeColumn.Header = "Type";
typeColumn.Binding = new Binding("Type");
DataGrid.Columns.Add(typeColumn);
//Define rows
var xRow = new ExpandoObject() as IDictionary;
var yRow = new ExpandoObject() as IDictionary;
xRow.Add("Type", "X");
yRow.Add("Type", "Y");
//Get user input
string input = UserInput.Text;

图片[1]-Excel教程Excel函数Excel透视表Excel电子表格Excel实用技巧Excel2010高效办公office2010Excel视频教程-唐朝资源网

//Add columns for (int i = 0; i < input.Length; i++) { DataGridTextColumn column = new DataGridTextColumn(); column.Header = input[I]; column.Binding = new Binding(input[i].ToString()); DataGrid.Columns.Add(column); //fill data xRow.Add(input[i].ToString(), 1.1); yRow.Add(input[i].ToString(), 1.1); } //Add rows DataGrid.Items.Add(xRow); DataGrid.Items.Add(yRow);

这种方法的问题是用户不能因为字典的原因两次添加相同的字母/列,但您可以调整和更改代码以满足您的需要。

【讨论】:

© 版权声明
THE END
喜欢就支持一下吧
点赞250 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片