Я использую веб-службу, которая возвращает набор данных. в этом наборе данных есть 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. Создайте 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
Было бы полезно, если бы вы указали свою платформу. Я предполагаю ASP.NET и C#, но кто знает - может быть псевдокод. Не могли бы вы отредактировать / изменить теги, чтобы быть более конкретным?