Как я могу удалить столбец набора данных? - PullRequest
2 голосов
/ 23 марта 2009

Как я могу удалить столбец набора данных?

Есть ли способ, который сделает это для меня так:

rh.dsDetail = ds.Tables[0].Columns.Remove(

Или, может быть, так:

rh.dsDetail = ds.Tables[0].Columns.Remove( ds.Tables[0].Columns[1],ds.Tables[0].Columns[2])

Ответы [ 5 ]

17 голосов
/ 23 марта 2009

Во-первых, DataTable имеет столбцы, а не набор данных.

Если вы хотите от них избавиться, то:

table.Columns.Clear();

в противном случае, если у вас есть индекс:

table.Columns.RemoveAt(0);

должен выполнить работу, если у вас есть индекс столбца. Обратите внимание, что если вы удалите столбец 0, то числа будут перетасовываться (поэтому вам может потребоваться сделать это в обратном порядке).

В качестве альтернативы вы можете удалить имя:

table.Columns.Remove("Foo");
4 голосов
/ 18 октября 2011

Я делал это раньше в winforms и веб-приложениях. Вы должны пройти через DataTable в обратном порядке, а затем выполнить AcceptChanges в конце. Этот конкретный пример типичен тем, что он удаляет все GUID (столбцы, заканчивающиеся на «id»).

    private void RemoveUselessFields(ref DataTable dtResults)
    {
        for (int i = dtResults.Columns.Count - 1; i >= 0; i--)
        {
            DataColumn column = dtResults.Columns[i];
            if (column.ColumnName.Substring(column.ColumnName.Length - 2, 2).ToUpper() == "ID") 
            {
                dtResults.Columns.Remove(column);
            }
        }
        dtResults.AcceptChanges();

    }
2 голосов
/ 23 марта 2009

Не существует встроенного метода для удаления более одного столбца одновременно. Вы можете создать метод расширения, если хотите. Примерно так:

 public static class DataColumnCollectionExtensions
    {
        public static void RemoveColumns(this DataColumnCollection column, params string[] columns)
        {
            foreach (string c in columns)
            {
                column.Remove(c);
            }
        }
    }

Затем вы можете использовать его так:

DataTable table1 = ds.Tables[0];
table1.Columns.RemoveColumns("Column1","Column2","Column6");
2 голосов
/ 23 марта 2009

Нет такого метода. Но вы можете просто написать свой собственный Helpermethod

public static void RemoveColumns(DataTable dt, params DataColumn[] dc)
{
    foreach (DataColumn c in dc)
    {
        dt.Columns.Remove(c);
    }
}

RemoveColumns(ds.Tables[0], ds.Tables[0].Columns[1], ds.Tables[0].Columns[2]);
0 голосов
/ 04 сентября 2013

Если вы хотите удалить столбцы, потому что у вас есть новый набор имен столбцов, вы можете использовать это:

DataSet.Reset();

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...