修改
我尝试将AutoGeneratColumns属性设置为false,如下所示: How to remove extra column Datagrid
但是,如果我这样做,我的所有专栏都会消失。
问题
我有一个包含程序生成的列和行的数据表。但是,我在生成的列的右侧有一个额外的列。我该怎么写才能让它消失?
xaml:
<DataGrid CanUserAddRows="False">
<DataGrid.ItemsSource>
<MultiBinding Converter="{StaticResource MatrixToDataViewConverter}">
<Binding Path="ColumnHeaders" ElementName="Results"/>
<Binding Path="RowHeaders" ElementName="Results"/>
<Binding Path="Values" ElementName="Results"/>
</MultiBinding>
</DataGrid.ItemsSource>
</DataGrid>
转换方法
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[];
double[,] matrix = values[2] as double[,];
myDataTable.Columns.Add("---"); //Upper left corner
foreach (string value in columns)
{
myDataTable.Columns.Add(value);
}
foreach (string value in rows)
{
myDataTable.Rows.Add(value);
}
for (int i = 0; i < matrix.GetLength(0); i++)
{
int row = System.Convert.ToInt32(matrix[i, 1]) - 1;
int column = System.Convert.ToInt32(matrix[i, 0]);
myDataTable.Rows[row][column] += matrix[i, 2].ToString() + " to " + matrix[i, 3].ToString() + Environment.NewLine;
}
return myDataTable.DefaultView;
}
答案 0 :(得分:0)
我不知道是什么原因引起了你的额外专栏,所以我给你一个标题问题的答案:
myDataTable.Columns.RemoveAt(myDataTable.Columns.Count - 1);
答案 1 :(得分:0)
您可以删除:
DataTable copyDataTable;
copyDataTable = table.Copy();
copyDataTable.Columns.Remove("ColB");
或使用DataView
过滤System.Data.DataView view = new System.Data.DataView(yourOriginalTable);
System.Data.DataTable selected =
view.ToTable("Selected", false, "col1", "col2", "col6", "col7", "col3");
答案 2 :(得分:0)
可能您的输入数据不正确。 调试这部分。
foreach (string value in columns)
{
myDataTable.Columns.Add(value);
}
如果你经历了4次......那就错了。
答案 3 :(得分:0)
试试这个
myDataTable.Columns.RemoveAt(myDataTable.Columns.Count - 1);
答案 4 :(得分:0)
我认为object[] values
数组有四个值, foreach 循环在DataTable中添加了四列。
在循环之前,您在DataTable中添加了一列myDataTable.Columns.Add("---");
。
因此,现在DataTable中有五列。