Как отобразить только определенные столбцы из таблицы данных? - PullRequest
2 голосов
/ 16 октября 2008

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

Итак

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

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

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

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

Ответы [ 6 ]

11 голосов
/ 16 октября 2008

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

5 голосов
/ 16 октября 2008

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

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

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;
}
1 голос
/ 16 октября 2008

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

dgvMain.Columns[ColumnA3_Name].Visible = true;
dgvMain.Columns[ColumnA1_Name].Visible = false;
0 голосов
/ 07 октября 2016
    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
0 голосов
/ 01 октября 2013

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

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

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

0 голосов
/ 13 июня 2012

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

Если имена столбцов в таблице 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();
    }
}

Удачи!

...