데이터 테이블에서 특정 열만 표시하려면 어떻게합니까?
문제
데이터 세트를 반환하는 웹 서비스를 사용하고 있습니다. 이 데이터 세트에는 5 개의 테이블이 있습니다. 테이블 A, B, C, D, E라고 가정 해 봅시다. 테이블 A를 사용합니다.
그래서
DataTable dt = new DataTable()
dt = dataset.Table["A"]
이제이 데이터 가능에는 열 A1, A2, A3, A4, A5, A6, A7이 있습니다.
열 A3 및 A4 열만 가져 와서 DataGrid에 바인딩하고 싶다고 가정 해 봅시다.
어떻게해야합니까?
해결책
필요한 것보다 더 많은 데이터가 있다는 사실을 무시하십시오. 세트 AutoGenerateColumns
에게 false
. 만들다 BoundColumns
~을 위한 a3
그리고 a4
.
다른 팁
읽는 것이 좋습니다 이것 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;
}
나는 전체 테이블을 바인딩 한 다음 다음과 같이 coulmns의 가시성을 설정합니다.
dgvMain.Columns[ColumnA3_Name].Visible = true;
dgvMain.Columns[ColumnA1_Name].Visible = false;
특정 열의 DatapRopertyName 속성을 항상 데이터 가능에 맞게 설정하려고 시도 할 수 있습니다. 그런 다음 해당 데이터 가능을 바인딩 소스에 바인딩하고 해당 빙원을 그리드에 바인딩하십시오.
DataGrid 열의 DataTable Match DatapRopertyNames의 열 이름 인 경우 데이터 그리드는 일치하는 열만 표시해야합니다.
내 예에서는 내 스트레인 Proc가 Simle과 같은 일을합니다.
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