Как мне отобразить только определенные столбцы из таблицы данных?

Я использую веб-службу, которая возвращает набор данных. в этом наборе данных есть 5 таблиц, скажем, таблица A, B, C, D, E. Я использую таблицу A.

Так

DataTable dt = new DataTable()
dt = dataset.Table["A"]

Теперь в этой таблице данных есть столбцы a1, a2, a3, a4, a5, a6, a7.

Скажем, я хочу получить только столбцы a3 и a4, а затем привязать их к моей сетке данных.

Как мне это сделать?

Было бы полезно, если бы вы указали свою платформу. Я предполагаю ASP.NET и C#, но кто знает - может быть псевдокод. Не могли бы вы отредактировать / изменить теги, чтобы быть более конкретным?

tvanfosson 16.10.2008 15:48
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
1
36 510
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Ответ принят как подходящий

Игнорируйте тот факт, что у вас больше данных, чем вам нужно. Установите AutoGenerateColumns на false. Создайте BoundColumns для a3 и a4.

Я бы связал всю таблицу, а затем настроил видимость столбцов следующим образом

dgvMain.Columns[ColumnA3_Name].Visible = true;
dgvMain.Columns[ColumnA1_Name].Visible = false;

Я бы рекомендовал прочитать статью это из 4GuysFromRolla всем, кому нужно хорошее понимание DataGrid Web Control.

Примечание: поскольку на этот вопрос уже дан ответ. Я хочу уточнить, что нужно сделать, на случай, если кому-то еще интересно.

DataSet ds;

//Get Data
using (SqlConnection connection = new SqlConnection(connectionString))
    {
        // Create the command and set its properties.
        SqlCommand command = new SqlCommand();
        command.Connection = connection;
        command.CommandText = "GetMyData";
        command.CommandType = CommandType.StoredProcedure;

        ds = connection.ExecuteDataSet();
    }
if (ds !=null && ds.Tables.Count > 0)
{
    dg.DataSource = ds.Tables[0];
    // disable autogeneration of columns
    dg.AutoGenerateColumns = false;
    //Hide unecessary columns
    dg.Columns["a3"].Visible = false;
    dg.Columns["a4"].Visible = false;
}

Вы всегда можете попытаться установить свойства DataPropertyName для определенных столбцов, чтобы они соответствовали тому, что находится в вашем DataTable. Затем привяжите этот DataTable к BindingSource и привяжите этот источник binging к своей сетке.

Пока имена столбцов в вашем DataTable совпадают с DataPropertyNames ваших столбцов DataGrid, ваша сетка данных должна отображать только эти совпадающие столбцы.

В моем примере мой stred proc делает что-то вроде:

ALTER PROCEDURE ps_Clients_Get
AS
BEGIN
    SELECT 
        convert(varchar(2000), path) as [Client Folder], 
        c.description as [Client Name],
        c.* 
    FROM Client c
END 
GO

и мой код C#:

using (DataTable dt = new DataTable())
{
    using (OdbcConnection cnDsn = new OdbcConnection(cmLocalTrackingDBDSNAME))
    {
        cnDsn.Open();
        using (OdbcCommand cmdDSN = new OdbcCommand())
        {
                  var _with1 = cmdDSN;
                  _with1.Connection = cnDsn;
                  _with1.CommandType = System.Data.CommandType.StoredProcedure;
                  _with1.CommandText = "{ CALL ps_Clients_Get }";
                  using (OdbcDataAdapter adapter = new OdbcDataAdapter())
                  {
                            dt.Locale = System.Globalization.CultureInfo.InvariantCulture;
                            adapter.SelectCommand = cmdDSN;
                            adapter.Fill(dt);
                            bindingSourceDataLocation.DataSource = dt;
                            dataGridViewDataLocation.AutoGenerateColumns = false;

                            dataGridViewDataLocation.DataSource = bindingSourceDataLocation;
                  }
         }
         cnDsn.Close();
    }
}

Удачи!

Привет, можно использовать следующий код

//It represent name of column for which you want to select records
string[] selectedColumns = new[] { "a3", "a4" }; 

DataTable tableWithSelectedColumns = new DataView(dataset.Table["A"]).ToTable(false,  selectedColumns);

Я пробовал это, и это работает.

    Dim DT As DataTable = YourDT

    DGV.DataSource = dt
    DGV.AutoGenerateColumns = False

    Dim cc = DGV.ColumnCount

    For i = 0 To cc - 1
        DGV.Columns(i).Visible = False
    Next

    DGV.Columns("ColumnToShow").Visible = True
    DGV.Columns("ColumnToShow").Visible = True

Другие вопросы по теме