无法从 'string' 转换为 'System.Windows.Controls.DataGridColumn'
Cannot convert from 'string' to 'System.Windows.Controls.DataGridColumn'
我正在使用 Visual Studion 2015、.NET Framework 4.5.2,使用 WPF,并希望以简单的方式将导入的 CSV 文件的内容分配给 DataGrid 对象,如下所述:
<Grid>
(...)
<DataGrid Name="dgOutput"
CanUserAddRows="True"
CanUserResizeColumns="True"
CanUserSortColumns="True"
Margin="24,142,112,109"
Grid.ColumnSpan="2"
Grid.RowSpan="2"
IsReadOnly="True">
</DataGrid>
</Grid>
我正在使用以下方法:
public MainWindow()
{
InitializeComponent();
string[] raw_text = System.IO.File.ReadAllLines("c:\temp\import.csv");
string[] data_col = null;
int x = 0;
foreach (string text_line in raw_text)
{
data_col = text_line.Split(',');
if (x == 0)
{
for(int i =0; i <= data_col.Count() -1; i++)
{
dgOutput.Columns.Add(data_col[i]);
}
}
else
{
}
}
}
但是我收到如下错误:
CS1503
cannot convert from 'string' to
'System.Windows.Controls.DataGridColumn'
如何解决这个问题?
您混淆了添加列和添加行。
尝试这样的事情。
DataGridTextColumn textColumn = new DataGridTextColumn();
textColumn.Header = "Babylon and Ting";
// Don't think you want this... textColumn.Binding = new Binding("BabylonAndTing");
dgOutput.Columns.Add(textColumn);
dgOutput.Items.Add("Jah rasterfari!");
编辑:尝试类似的操作(添加一个文本列并将数据放入该列)。
// First add a text column.
DataGridTextColumn textColumn = new DataGridTextColumn();
textColumn.Header = "Babylon and Ting";
dgOutput.Columns.Add(textColumn);
string[] raw_text = System.IO.File.ReadAllLines("c:\temp\import.csv");
string[] data_col = null;
int x = 0;
foreach (string text_line in raw_text)
{
data_col = text_line.Split(',');
if (x == 0)
{
for(int i =0; i <= data_col.Count() -1; i++)
{
// Then add rows to the datagrid.
dgOutput.Items.Add(data_col[i]);
}
}
else
{
}
}
Edit2: 看看这是怎么做的,然后复制(现在很忙,所以我无法详细说明)。摘自 here..
通常我们会将datagrid ItemsSource绑定到一个数据类型列表。我创建了一个具有绑定和手动添加项目示例的示例,供您参考。希望对你有帮助。
标记:
<DataGrid Name="dgOutput"
CanUserAddRows="True"
CanUserResizeColumns="True"
CanUserSortColumns="True"
Margin="24,142,112,109"
Grid.ColumnSpan="2"
Grid.RowSpan="2"
IsReadOnly="True">
</DataGrid>
代码:
using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
namespace SimpleDataGrid
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = new List<Person>
{
new Person{Name = "Tom", Age = 10},
new Person{Name = "Ken", Age = 20},
new Person{Name = "Jen", Age = 30}
};
dgOutput.Items.Add(new Person { Name = "Tom", Age = 10 });
dgOutput.Items.Add(new Person { Name = "Ken", Age = 20 });
dgOutput.Items.Add(new Person { Name = "Jen", Age = 30 });
dgOutput.Columns.Add(new DataGridTextColumn { Header = "Name", Binding = new Binding("Name") });
dgOutput.Columns.Add(new DataGridTextColumn { Header = "Age", Binding = new Binding("Age") });
}
}
public class Person
{
public string Name { set; get; }
public int Age { set; get; }
}
}
DataGrid 的列 属性 是 DataGridColumn 对象的 ObservableCollection。因此,它的 Add() 方法需要一个 DataGridColumn 类型的实例。在行
dgOutput.Columns.Add(data_col[i]);
您正在尝试添加字符串 (data_col[i]) 而不是 DataGridColumn。编译器将尝试将您提供给方法的内容(字符串)转换为方法所需的内容(DataGridColumn),但它不能这样做,因此出现 "cannot convert from 'string' to 'System.Windows.Controls.DataGridColumn'".
错误
您要做的是为 CSV 文件中的每一列(通常是 CSV 文件中的第一行文本)添加一个 DataGridTextColumn(派生自 DataGridColumn,因此将被 Add() 方法接受)仅包含列名称,您可以将其用作 DataGridTextColumn.Header 属性).
的值
我正在使用 Visual Studion 2015、.NET Framework 4.5.2,使用 WPF,并希望以简单的方式将导入的 CSV 文件的内容分配给 DataGrid 对象,如下所述:
<Grid>
(...)
<DataGrid Name="dgOutput"
CanUserAddRows="True"
CanUserResizeColumns="True"
CanUserSortColumns="True"
Margin="24,142,112,109"
Grid.ColumnSpan="2"
Grid.RowSpan="2"
IsReadOnly="True">
</DataGrid>
</Grid>
我正在使用以下方法:
public MainWindow()
{
InitializeComponent();
string[] raw_text = System.IO.File.ReadAllLines("c:\temp\import.csv");
string[] data_col = null;
int x = 0;
foreach (string text_line in raw_text)
{
data_col = text_line.Split(',');
if (x == 0)
{
for(int i =0; i <= data_col.Count() -1; i++)
{
dgOutput.Columns.Add(data_col[i]);
}
}
else
{
}
}
}
但是我收到如下错误:
CS1503
cannot convert from 'string' to 'System.Windows.Controls.DataGridColumn'
如何解决这个问题?
您混淆了添加列和添加行。
尝试这样的事情。
DataGridTextColumn textColumn = new DataGridTextColumn();
textColumn.Header = "Babylon and Ting";
// Don't think you want this... textColumn.Binding = new Binding("BabylonAndTing");
dgOutput.Columns.Add(textColumn);
dgOutput.Items.Add("Jah rasterfari!");
编辑:尝试类似的操作(添加一个文本列并将数据放入该列)。
// First add a text column.
DataGridTextColumn textColumn = new DataGridTextColumn();
textColumn.Header = "Babylon and Ting";
dgOutput.Columns.Add(textColumn);
string[] raw_text = System.IO.File.ReadAllLines("c:\temp\import.csv");
string[] data_col = null;
int x = 0;
foreach (string text_line in raw_text)
{
data_col = text_line.Split(',');
if (x == 0)
{
for(int i =0; i <= data_col.Count() -1; i++)
{
// Then add rows to the datagrid.
dgOutput.Items.Add(data_col[i]);
}
}
else
{
}
}
Edit2: 看看这是怎么做的,然后复制(现在很忙,所以我无法详细说明)。摘自 here..
通常我们会将datagrid ItemsSource绑定到一个数据类型列表。我创建了一个具有绑定和手动添加项目示例的示例,供您参考。希望对你有帮助。
标记:
<DataGrid Name="dgOutput"
CanUserAddRows="True"
CanUserResizeColumns="True"
CanUserSortColumns="True"
Margin="24,142,112,109"
Grid.ColumnSpan="2"
Grid.RowSpan="2"
IsReadOnly="True">
</DataGrid>
代码:
using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
namespace SimpleDataGrid
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = new List<Person>
{
new Person{Name = "Tom", Age = 10},
new Person{Name = "Ken", Age = 20},
new Person{Name = "Jen", Age = 30}
};
dgOutput.Items.Add(new Person { Name = "Tom", Age = 10 });
dgOutput.Items.Add(new Person { Name = "Ken", Age = 20 });
dgOutput.Items.Add(new Person { Name = "Jen", Age = 30 });
dgOutput.Columns.Add(new DataGridTextColumn { Header = "Name", Binding = new Binding("Name") });
dgOutput.Columns.Add(new DataGridTextColumn { Header = "Age", Binding = new Binding("Age") });
}
}
public class Person
{
public string Name { set; get; }
public int Age { set; get; }
}
}
DataGrid 的列 属性 是 DataGridColumn 对象的 ObservableCollection。因此,它的 Add() 方法需要一个 DataGridColumn 类型的实例。在行
dgOutput.Columns.Add(data_col[i]);
您正在尝试添加字符串 (data_col[i]) 而不是 DataGridColumn。编译器将尝试将您提供给方法的内容(字符串)转换为方法所需的内容(DataGridColumn),但它不能这样做,因此出现 "cannot convert from 'string' to 'System.Windows.Controls.DataGridColumn'".
错误您要做的是为 CSV 文件中的每一列(通常是 CSV 文件中的第一行文本)添加一个 DataGridTextColumn(派生自 DataGridColumn,因此将被 Add() 方法接受)仅包含列名称,您可以将其用作 DataGridTextColumn.Header 属性).
的值