0

私はデータグリッドビューを備えたクラッドフォームを持っています。ここに私の「リフレッシュ」コードがあります:

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();
        }
4

1 に答える 1

0

キャンセルボタンがポストバックしていて、再バインドしていないと思いますか? ポストバックごとにグリッドを再バインドする必要があります。

于 2013-07-26T12:59:22.693 に答える