null异常错误数据表c#

时间:2017-07-13 07:07:53

标签: c# wpf xaml

我正在尝试为我的行和列分别创建一个包含 rows columns 标题的矩阵。当我在 columns 中有两个相同的值时,我收到错误。但是,当我在中有两个相同的值时,它会起作用。为什么呢?

错误:

  

PresentationFramework.dll中出现'System.Windows.Markup.XamlParseException'类型的第一次机会异常   附加信息:'Set property'System.Windows.Controls.ItemsControl.ItemsSource'抛出异常。'行号“15”和行位置“48”。

enter image description here

我的xaml:

 <Window.Resources>
        <app:MatrixToDataViewConverter x:Key="MatrixToDataViewConverter"/>
    </Window.Resources>
    <Grid>
        <DataGrid>
            <DataGrid.ItemsSource>
                <MultiBinding Converter="{StaticResource MatrixToDataViewConverter}">
                    <Binding Path="ColumnHeaders" ElementName="Result"/>
                    <Binding Path="RowHeaders" ElementName="Result"/>
                    <!--<Binding Path="Values"/>-->
                </MultiBinding>
        </DataGrid.ItemsSource>
      </DataGrid>
    </Grid>

我的cs代码:

public partial class PopUp : Window
{  
    public string[] RowHeaders { get; set;  }

    public string[] ColumnHeaders { get; set;  }

    public ResultPopUp(Array[] Result, List<int> Vb1, List<int> Vb)
    {
        RowHeaders = new string[Vb.Count];
        for (int i = 0; i < Vb.Count; i++)
        {
            RowHeaders[i] = Vb[i];
        }

        ColumnHeaders = new string[Vb1.Count];
        for (int j = 0; j < Vb1.Count; j++)
        {
            ColumnHeaders[j] = Vb[j];
        }
        try
        {
            InitializeComponent();
        }
        catch(Exception ex)
        {

        }                
    }    
}

public class MatrixToDataViewConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        var myDataTable = new DataTable();

        string[] columns = values[0] as string[];
        string[] rows = values[1] as string[];
        myDataTable.Columns.Add("---"); //Upper left corner

        foreach (string value in columns)
        {
            myDataTable.Columns.Add(value); // this is where the error occurs when trying to add the second value if it is the same as the first one.
        }  

        foreach (string value in rows)
        {
            myDataTable.Rows.Add(value);
        }

        return myDataTable.DefaultView;
    }    

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

2 个答案:

答案 0 :(得分:0)

我认为错误就在这里:

public string[] RowHeaders { get; set;  }
public string[] ColumnHeaders { get; set;  }

如果不在ResultPopUp的构造函数中创建数组,则RowHeaders和ColumnHeaders将为null。

答案 1 :(得分:0)

因为你的列名列相同。

所以将代码更改为

   myDataTable.Columns.Add();
   //Creates an unique column name thats not duplicated.

   myDataTable.Columns[myDataTable.Columns.Count-1][0] = value[0];

这会创建列并通过寻址将值放入单元格中。 希望它有所帮助。