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;
しかし、私が手に入れたのはDataTableADDS NEWカラムをDataGridViewに追加するだけです。これは必要ありません。既存の列の下に書くだけです。 助けてください、みんな!
これを試して:
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;
}
さらに良い:
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に列を自動生成しないように指示する必要があります。したがって、コントロールに手動で入力した列のデータのみをプルします。 ..最後にコントロールを更新して、データバインドを更新します。
DataGridViewで、列のDataPropertyNameを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'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つの手順に従って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());
foreach (DictionaryEntry entry in Hashtable)
{
datagridviewTZ.Rows.Add(entry.Key.ToString(), entry.Value.ToString());
}
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;
}