【问题标题】:How to change the default value of a data grid view combo box column with selected value from itself如何使用来自自身的选定值更改数据网格视图组合框列的默认值
【发布时间】:2014-01-21 06:02:20
【问题描述】:

我的数据网格视图中有一个数据网格视图组合框列。在表单的加载事件中,我将公司名称加载到组合框列中,并通过单元格格式化事件为数据网格视图组合框列提供默认值。

现在,如果我从组合框列中选择不同的值,它不会得到反映。意味着只有默认值。

我的加载和单元格格式代码是

   public void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
    {
        SqlConnection c = new SqlConnection();
        c.ConnectionString = "Data Source=.\\SQLEXPRESS;AttachDbFilename='D:\\Documents\\Visual Studio 2008\\Projects\\Accounts\\Accounts\\Database1.mdf';Integrated Security=True;User Instance=True";
        c.Open();

        if (e.ColumnIndex == 1 && Viewcashvoucher.mk != "")
        {
            string mky = Viewcashvoucher.mk;
                 string q = "select * from lgr where main_key ='" + mky + "'";
                 SqlCommand cmd = new SqlCommand(q, c);
        SqlDataReader dr = cmd.ExecuteReader();

        if (dr.Read())
        {
            e.Value = dr["account_n"].ToString();

        }
        }
        c.Close();
    }

加载事件是

private void Cash_Voucher_Load(object sender, EventArgs e)
    {
        string mky = Viewcashvoucher.mk;
        SqlConnection c = new SqlConnection();
        c.ConnectionString = "Data Source=.\\SQLEXPRESS;AttachDbFilename='D:\\Documents\\Visual Studio 2008\\Projects\\Accounts\\Accounts\\Database1.mdf';Integrated Security=True;User Instance=True";
        c.Open();


            string q = "select max(date) from lgr ";
            SqlCommand cmd = new SqlCommand(q, c);
            SqlDataReader rd = cmd.ExecuteReader();
            try
            {
                if (rd.Read())
                {
                    DateTime date = rd.GetDateTime(0);
                    if (date != null)
                    {
                        tbdate.Text = date.ToShortDateString();
                    }
                }
            }
            catch (Exception ex)
            {
                tbdate.Text = DateTime.Now.ToShortDateString();
            }
            c.Close();
            c.Open();
            string q1 = "select account_n from master";
            SqlCommand cmd1 = new SqlCommand(q1, c);
            SqlDataReader rd1 = cmd1.ExecuteReader();
            DataGridViewComboBoxColumn acname = dataGridView1.Columns[1] as DataGridViewComboBoxColumn;
            while (rd1.Read())
            {
                acname.Items.Add(Convert.ToString(rd1["account_n"]));


            }

}

实际上我使用相同的数据网格视图进行插入和更新操作。我希望当用户从组合框列表中选择不同的值时,应将默认值替换为选定的值。

提前谢谢...

【问题讨论】:

    标签: c# datagridview combobox


    【解决方案1】:

    您还可以绑定 DataBindingComplete 事件。之前和这个答案的唯一区别是@Junaith 绑定 RowAdded 事件意味着每次添加行时它都会调用该函数。在我的情况下,我绑定了 DataBindingComplete 事件,该事件将在网格完全加载后触发,这意味着它只会调用一次,届时它将检查网格第一列中所有行的所有复选框.

    mygrid.DataBindingComplete +=
           new DataGridViewBindingCompleteEventHandler(mygrid_DataBindingComplete);
    

    然后,您必须将函数名称定义为 mygrid_DataBindingComplete

        private void mygrid_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
        {
            DataGridView temp = (DataGridView)sender;
    
            foreach (DataGridViewRow rw in temp.Rows)
            {
                // here 0 indicating the checbox column is the first column in grid
                // first column so index would be 0.  true will check the checkbox
                rw.Cells[0].Value = true;
            }
         }
    

    【讨论】:

    • 我在数据网格视图中没有复选框。实际上我想为插入和更新加载相同的数据网格视图。插入部分已经结束并且正在工作。
    • 所以你的意思是你想在组合网格填充中设置值,然后如果你保存记录,组合中的这个选择值不会反映。是这样吗?
    • 我在另一个表单上选择了数据网格视图中的所有记录。在 dgvcellcontentclick 事件中,我正在调用以前用于 insrtn 的相同表单,并通过 dgvcell 格式化事件,我将列的默认值设置为与我单击的内容相同的值。问题在于我想在 dgv 中获取多行。而且我无法编辑列(文本框)。在 dgvcomboboxcolumn 中,我通过加载事件加载了一些名称,如果我通过从列表中选择将组合框列的默认值更改为另一个值,它不会得到反映
    • 看看你是否在点击按钮时说如果不反映我没有得到的更改值..我尝试了一个例子。在datagridview中,我刚刚插入了一个组合框列,在数据绑定中,我在特定条件下更改了值,然后在表单加载时,我更改了下拉值并选择行并单击按钮以获取整行值,我得到了正确的值.. 请参考以下示例Download Sample
    • 先生,请把你的雅虎 ID 发给我。我会把我的项目发给你@Deepak
    【解决方案2】:

    CellFormatting 事件处理程序不是设置默认值的正确位置。每当需要格式化单元格的内容以供显示时,就会发生 CellFormatting。每当您更改组合框中的值并接受该值时,都会引发此事件,并且默认值代码会重置用户选择。

    DataGridView.RowsAdded 中,您可以为新添加的行设置组合框单元格的默认值

    示例代码:

    void dataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
        {
            for (int i = e.RowIndex; i < (e.RowIndex+e.RowCount); i++)
            {
                dataGridView1.Rows[i].Cells[comboboxcolumn_index].Value = defaultvalue;
            }            
        }
    

    【讨论】:

    • @朱奈思。它不工作。我在加载事件的数据网格视图组合框列中添加了项目。我希望当我从组合框中选择项目时,所选项目应替换默认项目
    • 无论何时添加新行,数据网格视图组合框列将所选项目替换为默认项目
    • 尝试在填充组合框列后将默认值代码移动到 OnLoad 事件处理程序中。
    • 即使我也在考虑它;)。会问你我是否遇到问题。 @Junaith
    【解决方案3】:

    你可以在 RowAdded 事件或 DataGridview 组合框列创建时间上使用它。它将设置默认值

    comboboxcolumn_Name.DefaultCellStyle.NullValue = "Please Select";
    

    【讨论】:

      【解决方案4】:
      void dataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
      {
          for (int i = e.RowIndex; i < (e.RowIndex+e.RowCount); i++)
          {
              comboboxcolumn_Name.DefaultCellStyle.NullValue = "Please Select";
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-05-24
        • 1970-01-01
        • 2022-10-31
        • 1970-01-01
        • 2013-12-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多