Cannot convert from 'string' to 'System.Windows.
本文关键字:System Windows to string Cannot convert from | 更新日期: 2023-09-27 18:14:56
我正在使用Visual studio 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
无法从'string'转换为"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!");
Edit:尝试这样做(添加一个文本列并将数据放在该列中)。
// 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:查看这是如何做的并复制(现在很忙,所以我不能进一步详细说明)。
通常我们会将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的Columns属性是DataGridColumn对象的ObservableCollection。因此,它的Add()方法需要一个DataGridColumn类型的实例。在
一行dgOutput.Columns.Add(data_col[i]);
您正在尝试添加字符串(data_col[i])而不是DataGridColumn。编译器将尝试转换你给的方法(字符串)什么方法需要(DataGridColumn),但它不能这样做,因此错误,它"不能从'string'转换为'System.Windows.Controls.DataGridColumn'"。
你要做的是添加一个DataGridTextColumn(它派生自DataGridColumn,因此将被add()方法接受)为您的CSV文件中的每一列(通常,CSV文件中的第一行文本仅由列名组成,您可以将其用作DataGridTextColumn的值。标题属性)。