【问题标题】:Convert and use DataTable in WPF DataGrid?在 WPF DataGrid 中转换和使用 DataTable?
【发布时间】:2011-10-22 12:25:06
【问题描述】:

在普通的 WinForm 应用程序中,您可以这样做:

DataTable dataTable = new DataTable();
dataTable = dataGridRecords.DataSource;

但是如何使用 WPF 数据网格做到这一点?

dataTable = dataGridRecords.ItemsSource;

也不行。

【问题讨论】:

    标签: c# wpf datagrid


    【解决方案1】:

    试试这个

        public static DataTable DataGridtoDataTable(DataGrid dg)
        {
    
    
            dg.SelectAllCells();
            dg.ClipboardCopyMode = DataGridClipboardCopyMode.IncludeHeader;
            ApplicationCommands.Copy.Execute(null, dg);
            dg.UnselectAllCells();
            String result = (string)Clipboard.GetData(DataFormats.CommaSeparatedValue);
            string[] Lines = result.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.None);
            string[] Fields;
            Fields = Lines[0].Split(new char[] { ',' });
            int Cols = Fields.GetLength(0);
    
            DataTable dt = new DataTable();
            for (int i = 0; i < Cols; i++)
                dt.Columns.Add(Fields[i].ToUpper(), typeof(string));
            DataRow Row;
            for (int i = 1; i < Lines.GetLength(0)-1; i++)
            {
                Fields = Lines[i].Split(new char[] { ',' });
                Row = dt.NewRow();
                for (int f = 0; f < Cols; f++)
                {
                    Row[f] = Fields[f];
                }
                dt.Rows.Add(Row);
            }
            return dt;
    
        }
    

    【讨论】:

    • 如果你的数据中有逗号,这会搞砸
    【解决方案2】:

    您不需要DataViewAsDataTable 方法。只需执行以下操作:

    DataTable dt = ((DataView)dataGrid1.ItemsSource).ToTable();

    【讨论】:

      【解决方案3】:

      在 WPF 中你不这样做

      DataGrid.ItemsSource = DataTable;
      

      相反,你会这样做

       DataGrid.ItemsSource = DataTable.AsDataView();
      

      为了找回 DataTable,你可以这样做

      public static DataTable DataViewAsDataTable(DataView dv)
      {
          DataTable dt = dv.Table.Clone();
          foreach (DataRowView drv in dv)
             dt.ImportRow(drv.Row);
          return dt;
      }
      
      DataView view = (DataView) dataGrid.ItemsSource;
      DataTable table = DataViewAsDataTable(view)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-06-23
        • 1970-01-01
        • 2011-05-12
        • 2013-05-03
        • 1970-01-01
        • 2012-03-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多