كيف يمكنني عرض فقط أعمدة معينة من جدول البيانات؟

StackOverflow https://stackoverflow.com/questions/208186

سؤال

وأنا باستخدام خدمة ويب التي تقوم بإرجاع البيانات. في هذه البينات هناك 5 الجدول، دعنا نقول الجدول A، B، C، D، E. يمكنني استخدام الجدول A.

وهكذا

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

والآن في هذا DataTable وهناك أعمدة 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;
}

وكنت ربط الجدول بأكمله، ثم إعداد رؤية الأعمدة على النحو التالي

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

ويمكنك دائما في محاولة لوضع DataPropertyName خصائص أعمدة خاصة لتتطابق مع ما هو في DataTable والخاص. ثم ربط ذلك DataTable ولBindingSource وربط ذلك المصدر نهم إلى الشبكة الخاصة بك.

وطالما أسماء الأعمدة في حياتك DataPropertyNames مباراة DataTable والأعمدة DataGrid الخاص بك، يجب شبكة البيانات الخاصة بك فقط عرض هذه الأعمدة مطابقة.

في المثال بلادي بلادي بروك STRED يفعل شيئا 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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top