如何仅显示数据表中的某些列

本文关键字:何仅 显示 数据表 | 更新日期: 2023-09-27 17:47:47

我使用的是一个返回数据集的web服务。在这个数据集中有5个表,比方说表A、B、C、D、E。我使用表A。

所以

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

现在,在这个数据表中有列a1、a2、a3、a4、a5、a6、a7。

假设我只想得到列a3和a4,然后将其绑定到我的数据网格。

我该怎么做?

如何仅显示数据表中的某些列

忽略这样一个事实,即您拥有的数据超出了您的需要。将AutoGenerateColumns设置为false。为a3a4创建BoundColumns

我建议任何需要充分了解DataGrid Web控件的人阅读4GuysFromRolla中的这篇文章。

注意:既然这个问题已经回答了。我想澄清一下需要做什么,以防其他人想知道。

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;
}

我会绑定整个表,然后按照以下设置coulns的可见性

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

Hi可以使用以下代码

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

我试过了,效果很好。

您可以始终尝试设置特定列的DataPropertyName属性,以匹配DataTable中的属性。然后将该DataTable绑定到BindingSource,并将该绑定源绑定到您的网格。

只要DataTable中列的名称与DataGrid列的DataPropertyNames匹配,数据网格就应该只显示那些匹配的列。

在我的例子中,我的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();
    }
}

祝你好运!

    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