Wie zeige ich nur bestimmte Spalten aus einer Datentabelle?
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?
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