Frage

Ich verwende einen Web-Service, einen Datensatz zurückgibt. in diesem Datensatz gibt es 5 Tisch, lassen Sie uns Tabelle A sagen, B, C, D, E. I Tabelle A verwenden.

So

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

Jetzt in dieser Datentabelle gibt es Spalten a1, a2, a3, a4, a5, a6, a7.

Lassen Sie uns sagen, ich will nur Spalten bekommen a3 und a4 dann binden Sie es an meine Datenraster.

Wie kann ich das tun?

War es hilfreich?

Lösung

Ignorieren Sie die Tatsache, dass Sie mehr Daten, als Sie benötigen. Set AutoGenerateColumns false. Erstellen BoundColumns für a3 und a4.

Andere Tipps

würde ich empfehlen, lesen diese Artikel von 4GuysFromRolla für jeden, der braucht ein gutes Verständnis für die DataGrid Web Control.

Hinweis: Da diese Frage bereits beantwortet. Ich möchte klarstellen, was getan werden muss, nur für den Fall, dass jemand anderes fragen.

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

ich die ganze Tabelle binden würde, dann setzen Sie die Sichtbarkeit der Spalten wie folgt

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

Sie können immer versuchen DataPropertyName Eigenschaften von bestimmten Spalten auf dem entsprechen, was in Ihrem Datatable ist. Dann binden, dass die Datatable an ein Binding und bindet, dass binging Quelle zu Ihrem Netz.

Solange Namen der Spalten in Ihrer Datentabelle Spiel DataPropertyNames Ihre Datagrid-Spalten, sollen Sie Ihre Datenraster diese angepassten Spalten nur angezeigt werden.

In meinem Beispiel mein Stred proc tut etwas simle wie:

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

und mein C # -Code:

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

Viel Glück!

Hallo folgender Code kann verwendet werden,

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

Ich habe versucht und es funktioniert.

    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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top