Как связать datatable с datagridview в С#

Мне нужно привязать мой DataTable к DataGridView. Я делаю это:

        DTable = new DataTable();
        SBind = new BindingSource();
        //ServersTable - DataGridView
        for (int i = 0; i < ServersTable.ColumnCount; ++i)
        {
            DTable.Columns.Add(new DataColumn(ServersTable.Columns[i].Name));
        }

        for (int i = 0; i < Apps.Count; ++i)
        {
            DataRow r = DTable.NewRow();
            r.BeginEdit();
            foreach (DataColumn c in DTable.Columns)
            {
                r[c.ColumnName] = //writing values
            }
            r.EndEdit();
            DTable.Rows.Add(r);
        }
        SBind.DataSource = DTable;
        ServersTable.DataSource = SBind;

Но все, что я получил, это DataTable ADDS NEW столбцы для моего DataGridView. Мне это не нужно, мне просто нужно писать в существующих столбцах. пожалуйста, помогите мне, ребята!

Ответы

Ответ 1

Попробуйте следующее:

    ServersTable.Columns.Clear();
    ServersTable.DataSource = SBind;

Если вы не хотите удалять все существующие столбцы, вы должны установить DataPropertyName для каждого существующего столбца следующим образом:

for (int i = 0; i < ServersTable.ColumnCount; ++i) {
  DTable.Columns.Add(new DataColumn(ServersTable.Columns[i].Name));
  ServersTable.Columns[i].DataPropertyName = ServersTable.Columns[i].Name;
}

Ответ 2

Еще лучше:

DataTable DTable = new DataTable();
BindingSource SBind = new BindingSource();
SBind.DataSource = DTable;
DataGridView ServersTable = new DataGridView();

ServersTable.AutoGenerateColumns = false;
ServersTable.DataSource = DTable;

ServersTable.DataSource = SBind;
ServersTable.Refresh();

Вы сообщаете источнику привязки, что он привязан к DataTable, в свою очередь вам нужно сообщить DataGridView не автогенерировать столбцы, поэтому он будет извлекать данные только для столбцов, которые вы вручную вводили в элемент управления... наконец обновите элемент управления, чтобы обновить привязку данных.

Ответ 3

В DataGridView установите DataPropertyName столбцов в имена столбцов вашего DataTable.

Ответ 4

//Сначала я построил свой datatable и заполнил его, столбцы, строки и все. // Затем, как только таблица данных станет функциональной, сделайте следующее, чтобы связать ее с DGV. ПРИМЕЧАНИЕ. Для этого примера свойство DGV AutoGenerateColumns должно иметь значение true, иначе "присвоение" имен столбцов из datatable для dgv не будет работать. Я также "добавил" свои данные в набор данных ранее, но я не думаю, что это необходимо.

 BindingSource SBind = new BindingSource();
 SBind.DataSource = dtSourceData;

 ADGView1.AutoGenerateColumns = true;  //must be "true" here
 ADGView1.Columns.Clear();
 ADGView1.DataSource = SBind;

 //set DGV column names and headings from the Datatable properties
 for (int i = 0; i < ADGView1.Columns.Count; i++)
 {
       ADGView1.Columns[i].DataPropertyName = dtSourceData.Columns[i].ColumnName;
       ADGView1.Columns[i].HeaderText = dtSourceData.Columns[i].Caption;
 }
 ADGView1.Enabled = true;
 ADGView1.Refresh();

Ответ 5

foreach (DictionaryEntry entry in Hashtable)
{
    datagridviewTZ.Rows.Add(entry.Key.ToString(), entry.Value.ToString());
}

Ответ 6

private void Form1_Load(object sender, EventArgs e)
    {
        DataTable StudentDataTable = new DataTable("Student");

        //perform this on the Load Event of the form
        private void AddColumns() 
        {
            StudentDataTable.Columns.Add("First_Int_Column", typeof(int));
            StudentDataTable.Columns.Add("Second_String_Column", typeof(String));

            this.dataGridViewDisplay.DataSource = StudentDataTable;
        }
    }

    //Save_Button_Event to save the form field to the table which is then bind to the TableGridView
    private void SaveForm()
        {
            StudentDataTable.Rows.Add(new object[] { textBoxFirst.Text, textBoxSecond.Text});

            dataGridViewDisplay.DataSource = StudentDataTable;
        }

Ответ 7

например, мы хотим установить для DataTable "Users" значение DataGridView, выполнив 2 шага: шаг 1 - получить всех пользователей:

public DataTable  getAllUsers()
    {
        OracleConnection Connection = new OracleConnection(stringConnection);
        Connection.ConnectionString = stringConnection;
        Connection.Open();

        DataSet dataSet = new DataSet();

        OracleCommand cmd = new OracleCommand("semect * from Users");
        cmd.CommandType = CommandType.Text;
        cmd.Connection = Connection;

        using (OracleDataAdapter dataAdapter = new OracleDataAdapter())
        {
            dataAdapter.SelectCommand = cmd;
            dataAdapter.Fill(dataSet);
        }

        return dataSet.Tables[0];
    }

шаг 2- устанавливает возвращаемый результат в DataGridView:

public void setTableToDgv(DataGridView DGV, DataTable table)
    {
        DGV.DataSource = table;
    }

используя пример:

    setTableToDgv(dgv_client,getAllUsers());