Hapus kolom dari DataTable di C #

113

Saya memiliki DataSet yang saya dapatkan DataTable dari yang saya sedang dikirimkan kembali dari panggilan fungsi. Ini memiliki 15-20 kolom, namun saya hanya ingin 10 kolom data.

Apakah ada cara untuk menghapus kolom yang tidak saya inginkan, salin DataTable ke kolom lain yang hanya memiliki kolom yang saya inginkan atau lebih baik mengulang koleksi dan cukup gunakan kolom yang saya butuhkan.

Saya perlu menulis nilai ke file data dengan panjang tetap.

Brian G
sumber
Saya tidak memiliki kendali atas kumpulan data yang saya terima. Satu-satunya hal yang saya tahu adalah itu berisi segalanya.
Brian G

Jawaban:

302

Selain membatasi kolom yang dipilih untuk mengurangi bandwidth dan memori:

DataTable t;
t.Columns.Remove("columnName");
t.Columns.RemoveAt(columnIndex);
Tom Ritter
sumber
13
Hanya untuk memperjelas: Ini juga berfungsi jika baris yang DataTablesudah ada, tidak hanya di tempat kosong DataTable.
Uwe Keim
23

Untuk menghapus semua kolom setelah yang Anda inginkan, kode di bawah ini harus berfungsi. Ini akan dihapus pada indeks 10 (ingat Kolom berbasis 0), sampai jumlah Kolom 10 atau kurang.

DataTable dt;
int desiredSize = 10;

while (dt.Columns.Count > desiredSize)
{
   dt.Columns.RemoveAt(desiredSize);
}
Timothy Carter
sumber
1
hanya 2c saya, saya tidak suka solusi ini, bekerja dengan indeks kolom menyebabkan pemeliharaan mimpi buruk ..
Roberto
1
pertanyaannya mencakup pernyataan berikut: "..kolom didefinisikan yang saya inginkan .." jadi itu berarti kolom yang dibutuhkan bahkan tidak harus dalam urutan berurutan sehingga orang tidak bisa hanya mengatakan "Saya butuh 10 kolom pertama". Dengan demikian, solusi harus berisi larik nama kolom yang dia inginkan, lalu kita dapat menghilangkan semua yang lain yang tidak termasuk dalam kumpulan nama yang "ditentukan" ini. Berbagai cara untuk menerapkan ini; dari loop foreach sederhana ke query atau LINQ menggunakan IN.
Roberto
3

Pertanyaan tersebut telah ditandai sebagai terjawab, Tapi saya kira pertanyaan tersebut menyatakan bahwa orang tersebut ingin menghapus beberapa kolom dari a DataTable.

Jadi untuk itu, inilah yang saya lakukan, ketika saya menemukan masalah yang sama.

string[] ColumnsToBeDeleted = { "col1", "col2", "col3", "col4" };

foreach (string ColName in ColumnsToBeDeleted)
{
    if (dt.Columns.Contains(ColName))
        dt.Columns.Remove(ColName);
}
SU7
sumber