私はデータグリッドビューを備えたクラッドフォームを持っています。ここに私の「リフレッシュ」コードがあります:
private void Recuperar()
{
DataSet ds = new DataSet();
string CommandText = "SELECT * from sectores order by sector";
SQLiteDataAdapter adapter = new SQLiteDataAdapter(CommandText, Variables.Conexion);
DataTable table = new DataTable();
table.TableName = "sectores";
adapter.Fill(table);
grilla.DataSource = table;
grilla.Refresh();
grilla.Columns["sector_id"].Visible = false;
grilla.Columns["clave"].Visible = false;
grilla.Columns["sector"].HeaderText = "Sector";
grilla.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
SetDataBinding();
}
private void SetDataBinding()
{
this.textBoxId.DataBindings.Clear();
this.textBoxId.DataBindings.Add(new System.Windows.Forms.Binding("Text", grilla.DataSource, "sector_id"));
this.tbSector.DataBindings.Clear();
this.tbSector.DataBindings.Add(new System.Windows.Forms.Binding("Text", grilla.DataSource, "sector"));
this.tbClave1.DataBindings.Clear();
this.tbClave1.DataBindings.Add(new System.Windows.Forms.Binding("Text", grilla.DataSource, "clave"));
this.tbClave2.DataBindings.Clear();
this.tbClave2.DataBindings.Add(new System.Windows.Forms.Binding("Text", grilla.DataSource, "clave"));
}
「追加」ボタンのコードでは、コントロール (データグリッドにバインドされているコントロール) のテキストをクリアするので、ユーザーは新しい値を挿入します。
private void btn_agregar_Click(object sender, EventArgs e)
{
grilla.ClearSelection();
accion = DataRowAction.Add;
SetEstado();
}
private void SetEstado()
{
if (accion == DataRowAction.Add)
btn_guardar.Text = "Agregar";
if (accion == DataRowAction.Change)
btn_guardar.Text = "Modificar";
if (accion == DataRowAction.Delete)
btn_guardar.Text = "Eliminar";
if (accion == DataRowAction.Nothing)
btn_guardar.Text = "Guardar";
groupBoxControles.Enabled = accion == DataRowAction.Add || accion == DataRowAction.Change;
PanelDerechaBotones.Enabled = accion != DataRowAction.Nothing;
panelAbajo.Enabled = accion == DataRowAction.Nothing;
grilla.Enabled = accion == DataRowAction.Nothing;
if (accion == DataRowAction.Add)
{
textBoxId.Text = "0";
tbSector.Text = "";
tbClave1.Text = "";
tbClave2.Text = "";
}
if (accion == DataRowAction.Add || accion == DataRowAction.Change)
{
tbSector.Focus();
}
}
問題は、ユーザーがこのアクションをキャンセルすると、グリッドで選択された行がすべて空に見えることです。(空の値をコントロールからグリッドに移動)
私は何かが欠けていることを知っていますが、何がわかりません。誰かが私を助けてくれてありがとう。
キャンセルボタンのコード
private void btn_cancelar_Click(object sender, EventArgs e)
{
accion = DataRowAction.Nothing;
SetEstado();
//((DataTable)grilla.DataSource).RejectChanges();
}