如何从数据网格中排除交错数组的第一行
本文关键字:数组 一行 数据 数据网 网格 排除 | 更新日期: 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;
}
基本上,我只是将原始数据复制到另一个较短的数组中,并排除另一个数组的第一行。