Выберите определенные столбцы таблицы данных
У меня есть datatable и хотелось бы знать, возможно ли мне выбрать определенные столбцы и ввести данные в таблицу. столбцы указаны ниже
| col1 | col2 | col3 | col4 | col5 | col6 | col7 | col8 | col9 | col10 | col11 |
Я хочу выбрать столбцы col1, col2 col6, col7, col3. и dispay данные в gridview строк в datatable. В настоящее время код, который я использую, ниже и onmly выбирает определенные данные. Я не выбираю данные из sql, данные которого выбираются из другого excel, который хранится в datatable.. но мне нужны другие столбцы и в другой области. Эти данные записываются в таблицу в слово
for (int i = 1; i < table.Rows.Count; i++)
{
for (int j = 0; j < table.Columns.Count; j++)
{
if (j == 0)
{
val = filteredData.Rows[row][col].ToString();
}
else
{
val = filteredData.Rows[row][col].ToString();
if (val == "-" || val == "")
{
val = filteredData.Rows[row][col].ToString();
}
else
{
val = Convert.ToString(Math.Round(Convert.ToDouble(filteredData.Rows[row][col]), MidpointRounding.AwayFromZero));
}
}
table[j, i].TextFrame.Text = val;
col++;
}
Ответы
Ответ 1
Сначала сохраните таблицу в представлении, затем выберите столбцы из этого представления в новую таблицу.
System.Data.DataTable table = new System.Data.DataTable();
for (int i = 1; i <= 11; i++)
table.Columns.Add("col" + i.ToString());
for (int i = 0; i < 100; i++)
{
System.Data.DataRow row = table.NewRow();
for (int j = 0; j < 11; j++)
row[j] = i.ToString() + ", " + j.ToString();
table.Rows.Add(row);
}
System.Data.DataView view = new System.Data.DataView(table);
System.Data.DataTable selected = view.ToTable("Selected", false, "col1", "col2", "col6", "col7", "col3");
Использовал образцы данных для проверки этого метода. Я нашел:
Создать ADO.NET DataView, показывающий только выбранные столбцы
Ответ 2
Также мы можем попробовать это,
string[] selectedColumns = new[] { "Column1","Column2"};
DataTable dt= new DataView(fromDataTable).ToTable(false, selectedColumns);
Ответ 3
Вопрос, который я задал бы, заключается в том, почему вы включаете дополнительные столбцы в свой DataTable, если они не требуются?
Возможно, вам следует изменить инструкцию SQL select, чтобы она просматривала конкретные критерии, которые вы ищете, когда вы заполняете свой DataTable.
Вы также можете использовать LINQ для запроса вашего DataTable как Enumerable и создания объекта списка, который представляет только определенные столбцы.
Кроме этого, скройте столбцы DataGridView, которые вам не нужны.
Ответ 4
Здесь рабочий пример с анонимной выходной записью, если у вас есть вопросы, разместите комментарий ниже:
Открытый частичный класс Form1: Форма { Таблица DataTable;
public Form1()
{
InitializeComponent();
#region TestData
table = new DataTable();
table.Clear();
for (int i = 1; i < 12; ++i)
table.Columns.Add("Col" + i);
for (int rowIndex = 0; rowIndex < 5; ++rowIndex)
{
DataRow row = table.NewRow();
for (int i = 0; i < table.Columns.Count; ++i)
row[i] = String.Format("row:{0},col:{1}", rowIndex, i);
table.Rows.Add(row);
}
#endregion
bind();
}
public void bind()
{
var filtered = from t in table.AsEnumerable()
select new
{
col1 = t.Field<string>(0),//column of index 0 = "Col1"
col2 = t.Field<string>(1),//column of index 1 = "Col2"
col3 = t.Field<string>(5),//column of index 5 = "Col6"
col4 = t.Field<string>(6),//column of index 6 = "Col7"
col5 = t.Field<string>(4),//column of index 4 = "Col3"
};
filteredData.AutoGenerateColumns = true;
filteredData.DataSource = filtered.ToList();
}
}
Ответ 5
Вы можете создать метод, который выглядит так:
public static DataTable SelectedColumns(DataTable RecordDT_, string col1, string col2)
{
DataTable TempTable = RecordDT_;
System.Data.DataView view = new System.Data.DataView(TempTable);
System.Data.DataTable selected = view.ToTable("Selected", false, col1, col2);
return selected;
}
Вы можете вернуть как можно больше столбцов. Просто добавьте столбцы в качестве параметров вызова, как показано ниже:
public DataTable SelectedColumns(DataTable RecordDT_, string col1, string col2,string col3,...)
а также добавьте параметры в эту строку:
System.Data.DataTable selected = view.ToTable("Selected", false,col1, col2,col3,...);
Затем просто реализуйте функцию как:
DataTable myselectedColumnTable=SelectedColumns(OriginalTable,"Col1","Col2",...);
Спасибо...