【问题标题】:How to remove last column datatable c#如何删除最后一列数据表c#
【发布时间】:2017-07-14 08:59:03
【问题描述】:

编辑

我已尝试按照以下建议将 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;
            }

【问题讨论】:

标签: c# xaml datatable


【解决方案1】:

我不知道是什么导致了你的额外专栏,所以我就标题的问题给你一个答案:

myDataTable.Columns.RemoveAt(myDataTable.Columns.Count - 1);

【讨论】:

  • @Emelie:为什么现在更合适?如果不是最后一列,如何确定要删除的额外列?
  • 我改回来了...我已经尝试了您的解决方案,但它没有删除不需要的列,而是删除了左侧的列。
  • 对标题的更改感到抱歉...还是其他令人困惑的事情? @iamCR。
  • 您的问题说右边有额外的列,这个答案应该删除右边的最后一列。但你是说它删除了左边。更好的是,您可以附加DataTable 的图像而不是网格
  • 我知道。我的理论是最后一个“列”并不是真正的列。因此,当我尝试此代码时,它会删除第一行中 211 到 287 的列,即我要删除的“列”左侧的列。我不明白你的意思是什么图片@iamCR。
【解决方案2】:

您可以删除:

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");

【讨论】:

    【解决方案3】:

    可能您的输入数据不正确。 调试这部分。

    foreach (string value in columns)
    {
        myDataTable.Columns.Add(value);
    }
    

    如果你经历了4次……那就错了。

    【讨论】:

    • 我已经调试了那部分,但不幸的是这不是我的问题。
    【解决方案4】:

    试试这个

        myDataTable.Columns.RemoveAt(myDataTable.Columns.Count - 1);
    

    【讨论】:

    • 我没有datagridview,只有datagrid。 myDataGrid.Columns[i] 不包含 Visible 的定义。
    【解决方案5】:

    我认为object[] values 数组有四个值,foreach 循环在您的 DataTable 中添加了四个列。

    在循环之前,您在 DataTable 中添加了一列 myDataTable.Columns.Add("---");

    所以,现在您的 DataTable 中有五列。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-29
      • 2013-08-12
      • 1970-01-01
      • 1970-01-01
      • 2010-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多