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"

如何解决这个问题?

Cannot convert from 'string' to 'System.Windows.

您混淆了添加列和添加行。

试试这样做。

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的值。标题属性)。