1

私は初めてC#です。comboboxの最初の列に作成したいDatagridview。以下は私が書いたルーチンです。しかし、グリッドを設定した後、最後の列にコンボを追加しています。

グリッドを設定するために、私は以下のコードを試しました:

private void SetGrid()
{
    dgDetail.AutoGenerateColumns = false;
    dgDetail.ColumnCount = 5;
    dgDetail.Columns[0].Name = "Debit";
    dgDetail.Columns[0].HeaderText = "Debit Account Name";
    dgDetail.Columns[1].Name = "Bank";
    dgDetail.Columns[1].HeaderText = "Bank";
    dgDetail.Columns[2].Name = "ChqNo";
    dgDetail.Columns[2].HeaderText = "CC/Chq No";
    dgDetail.Columns[3].Name = "ChqDate";
    dgDetail.Columns[3].HeaderText = "Chq Date";
    dgDetail.Columns[4].Name = "Amount";
    dgDetail.Columns[4].HeaderText = "Amount";
    dgDetail.AllowUserToDeleteRows = true;
    dgDetail.Columns[0].Width = 280;
    dgDetail.Columns[1].Width = 160;
    dgDetail.Columns[2].Width = 90;
    dgDetail.Columns[3].Width = 90;
    dgDetail.Columns[4].Width = 120;
    dgDetail.RowsDefaultCellStyle.ForeColor = Color.Black;
    dgDetail.RowsDefaultCellStyle.BackColor = Color.White;
    dgDetail.Font = new Font("Arial", 9, FontStyle.Regular);
}

DBから入力されるコンボボックスを作成するため。

private void FillGridCombo()
{
    SqlConnection sqlConnection = new SqlConnection(strCon);
    sqlConnection.Open();
    try
    {
        string selectQueryStringMonth = "SELECT accode, GLAC FROM glmast where (actype = 'CSH' and titleac <> 'PDP') OR TITLEAC = 'DIS' ORDER BY GLAC";

        SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(selectQueryStringMonth, sqlConnection);
        SqlCommandBuilder sqlCommandBuilder = new SqlCommandBuilder(sqlDataAdapter);

        DataTable dataTable = new DataTable();
        sqlDataAdapter.Fill(dataTable);
        BindingSource bindingSourceMonth = new BindingSource();
        bindingSource.DataSource = dataTable;

        //Adding  Combo
        DataGridViewComboBoxColumn ColumnAcc = new DataGridViewComboBoxColumn();
        ColumnAcc.DataPropertyName = "Debit Account Name";
        ColumnAcc.HeaderText = "Debit Account Name";
        ColumnAcc.Width = 280;

        ColumnAcc.DataSource = bindingSourceMonth;
        ColumnAcc.ValueMember = "accode";
        ColumnAcc.DisplayMember = "GLAC";

        dgDetail.Columns.Add(ColumnAcc);
        dgDetail.DataSource = bindingSource;
    }

    catch (Exception ex)
    {
        MessageBox.Show("Error : " + ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }

    finally
    {
        if (sqlConnection.State != ConnectionState.Closed)
        sqlConnection.Close();
    }
}

このように NewData() で両方のプロシージャを呼び出しています。

private void NewData()
{
    if (dgDetail.DataSource != null)
        dgDetail.DataSource = null;
    else
        dgDetail.Rows.Clear();

    ClearData();
    CtrlEnable();
    SetGrid();
    FillGridCombo();
}

助けて/これを達成するために私を導いてください.,

4

2 に答える 2

1

使用する

dgDetail.Columns.Insert(0, ColumnAcc);

それ以外の

dgDetail.Columns.Add(ColumnAcc);

使用するときはAdd、最後の列として追加するだけです。挿入を使用している間は、追加先を選択できます。

public virtual void Insert( int columnIndex, DataGridViewColumn dataGridViewColumn )

columnIndexはゼロベースのインデックスであるため、0 が最初の列であることに注意してください。

于 2013-09-30T06:48:05.867 に答える
0

Insert次の代わりにメソッドを使用できますAdd

dgDetail.Columns.Insert(0,ColumnAcc);
于 2013-09-30T06:48:01.703 に答える