web-dev-qa-db-ja.com

c#でdatatableをdatagridviewにバインドする方法

DataTableDataGridViewにバインドする必要があります。私はこれをします:

        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;

しかし、私が手に入れたのはDataTableADDS NEWカラムをDataGridViewに追加するだけです。これは必要ありません。既存の列の下に書くだけです。 助けてください、みんな!

18
animekun

これを試して:

    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;
}
20
King King

さらに良い:

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に列を自動生成しないように指示する必要があります。したがって、コントロールに手動で入力した列のデータのみをプルします。 ..最後にコントロールを更新して、データバインドを更新します。

10
user817530

DataGridViewで、列のDataPropertyNameをDataTableの列名に設定します。

3
Marc K

//最初にデータテーブルを作成し、列、行、その他すべてにデータテーブルを追加しました。 //その後、データテーブルが機能するようになったら、次を実行してデータテーブルを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's 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();
2
Cwinds

たとえば、次の2つの手順に従ってDataTable 'Users'をDataGridViewに設定します。手順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());
0
foreach (DictionaryEntry entry in Hashtable)
{
    datagridviewTZ.Rows.Add(entry.Key.ToString(), entry.Value.ToString());
}
0
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;
        }
0
Parag555