如何从数据网格中排除交错数组的第一行

本文关键字:数组 一行 数据 数据网 网格 排除 | 更新日期: 2023-09-27 17:57:15

这是我之前问的一个问题的延续

将交错字符串数组绑定到数据网格

在我的代码中,我从 CSV 导入行并将它们存储在交错数组中。我还询问用户第一行是否包含列标题。如果是这样,那么我使用该行作为列名。我无法弄清楚的是,如何从DataGrid ItemSource中排除数组的第一行。这是方法,因此您可以确切地看到我在做什么。

    private void Import_Click(object sender, RoutedEventArgs e)
    {
        MessageBoxResult headerChoice = MessageBox.Show("Is the first row a column header?", "Import Options", MessageBoxButton.YesNo);
        string[][] array = fs.CSVToStringArray();
        string[] headerTitles = new string[array[0].Length];
        for (int i = 0; i < array[0].Length; i++)
        {
            var col = new DataGridTextColumn();
            if (headerChoice == MessageBoxResult.Yes)
                col.Header = array[0][i];
            else if (headerChoice == MessageBoxResult.No)
                col.Header = "Column " + i;
            col.Binding = new Binding(string.Format("[{0}]", i));
            this.ExternalData._dataGrid.Columns.Add(col);
        }
        if (headerChoice == MessageBoxResult.Yes)
            //exclude first row of array;
        else if (headerChoice == MessageBoxResult.No)
            this.ExternalData._dataGrid.ItemsSource = array;
    }

在我有注释"排除数组的第一行"的地方,我想放置一些将数组绑定到ItemSource并排除第一行的代码,因为它是列标题。

如何从数据网格中排除交错数组的第一行

使用Array.Copy()函数会更简洁,而不是使用for循环在两个数组之间复制数据:

if (headerChoice == MessageBoxResult.Yes)
{
    string[][] arrayNoHeader = new string[array.Length - 1][];
    //copy data from array to arrayNoHeader starting from index 1 (skipping row 0)
    Array.Copy(array, 1, arrayNoHeader, 0, array.Length-1);
    this.ExternalData._dataGrid.ItemsSource = arrayNoHeader;
}

这是我想出的一种方法,尽管我不知道这是否是最有效的方法,所以如果您有其他建议,请告诉我。

    private void Import_Click(object sender, RoutedEventArgs e)
    {
        MessageBoxResult headerChoice = MessageBox.Show("Is the first row a column header?", "Import Options", MessageBoxButton.YesNo);
        string[][] array = fs.CSVToStringArray();
        for (int i = 0; i < array[0].Length; i++)
        {
            var col = new DataGridTextColumn();
            if (headerChoice == MessageBoxResult.Yes)
                col.Header = array[0][i];
            else if (headerChoice == MessageBoxResult.No)
                col.Header = "Column " + i;
            col.Binding = new Binding(string.Format("[{0}]", i));
            this.ExternalData._dataGrid.Columns.Add(col);
        }
        if (headerChoice == MessageBoxResult.Yes)
        {
            string[][] arrayNoHeader = new string[array.Length - 1][];
            for (int i = 0; i < arrayNoHeader.Length; i++)
                arrayNoHeader[i] = array[i + 1];
            this.ExternalData._dataGrid.ItemsSource = arrayNoHeader;
        }
        else if (headerChoice == MessageBoxResult.No)
            this.ExternalData._dataGrid.ItemsSource = array;
    }

基本上,我只是将原始数据复制到另一个较短的数组中,并排除另一个数组的第一行。