【问题标题】:Select a column value of DataGridView in c# winformc# winform中选择DataGridView的一列值
【发布时间】:2013-11-27 01:19:01
【问题描述】:

我正在用 Visual Studio 2010 c# 开发一个应用程序。

如图所示,我有两种形式:

在 Form2 中,我有一个带有用户名的 DataGridView 控件,在 Form1 中,我有一个 TextBox 和一个 Button。我通过以下方式打开 Form2:

Form2 frm = new Form2();
        frm.ShowDialog();

如何获取Form1 TextBox中GDataGridView的选中列值?

【问题讨论】:

  • 对不起。我需要单元格值。谢谢德菲斯

标签: c# winforms c#-4.0 datagridview


【解决方案1】:

根据您的所有建议找到正确答案。

感谢您的帮助。

这是我为所有有需要的人提供的工作代码。

在表格 1 中

private void BtnSelect_Click(object sender, EventArgs e)
        {
            frm.ShowDialog();
            textBox1.Text= frm._textBox1.ToString();
        }
        public string _textBox
        {
            set { textBox1.Text = value; }
        }

在Form2中

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            string val = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString();
            textBox1.Text = val;
            this.Close();
        }
        public string _textBox1
        {
            get { return textBox1.Text.Trim(); }
        }

干杯..!!!!!!!!!

【讨论】:

    【解决方案2】:

    试试这个: 获取 Selected Grid 值

    if (dataGridView1.SelectedRows.Count != 0)
    {
        string selectedval;
        DataGridViewRow row = this.dataGridView1.SelectedRows[0];
        selectedval= row.Cells["ColumnName"].Value
    }
    

    定义表单的属性,然后在其他地方使用它,它将与表单实例一起使用

    public string SetText
    {
      get { return textBox1.Text; }
      set { textBox1.Text = value; }
    }
    

    【讨论】:

    • 嗨@Ganesh 我在行 row.Cells["ColumnName"].Value; 上遇到错误。 that '只有赋值、调用、递增、递减和新对象表达式可以用作语句'
    • 尝试:返回 row.Cells["ColumnName"].Value; ...原始帖子中缺少返回...
    • @Ashok_Karale 您将在 'selectedval' 变量中获得选定值
    【解决方案3】:

    这是解决您的情况的干净代码

    假设你有两个表单 Form1 和 Form2

    Form 1 有 文本框 和 按钮。在按钮点击上显示Form2

    Form1.cs

            private void button1_Click(object sender, EventArgs e)
            {
                  Form2 f = new Form2();
                  f.DataGridCell += new Action<string>(f_DatagridCell);
                  f.ShowDialog();
            }
    
           void f_DatagridCell(string obj)
           {
             textBox1.Text = obj;
           }
    

    在你的Form2.cs

          public event Action<string> DataGridCell ;
    
    
           private void dataGridView1_CellEnter(object sender, DataGridViewCellEventArgs e)
           {
            try
            {
                if (DatagridCell!=null)
                {
                    var value = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString();
                    DatagridCell(value);
    
                }
    
            }
            catch { }
        } 
    

    你已经完成了:)

    【讨论】:

      【解决方案4】:

      有我的变种。将此属性添加到带有数据网格的 Form 类中:

          public DataGridViewCell SelectedCell
          {
              get
              {
                  return dataGridView1.SelectedCells.Count > 0 ? dataGridView1.SelectedCells[0] : null;
              }
          }
      
          public string SelectedValue 
          {
              get
              {
      
                  var val = SelectedCell != null ? SelectedCell.Value : null;
                  return val != null ? val.ToString() : null;
              }
              set
              {
                  SelectedCell.Value = value;
              }
          }
      

      用法:

      form.SelectedValue = "123";
      

      只有在选择一个单元格时才能正常工作。

      【讨论】:

        【解决方案5】:

        您可以使用事件来解决问题。只需像这样在您的 form2 中创建一个事件

        public event Action<string> DatagridCellSelected; 
        

        在您的 form1 中连接一个带有此事件的方法。

        DatagridCellSelected+=form2_DatagridCellSelected;
        

        在这个方法中做这样的事情

        textbox1.Text = obj;
        

        现在在你的 form2 中处理 DataGridView 单元格输入事件

        private void dataGridView1_CellEnter(object sender, DataGridViewCellEventArgs e)
        {
            var value = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString();
            DatagridCellSelected(value ?? "");
        }
        

        【讨论】:

        • 您是否应该在发布事件之前添加一个空值检查?
        • 是的。这可能会导致一些实际问题。
        猜你喜欢
        • 1970-01-01
        • 2016-05-31
        • 1970-01-01
        • 2019-05-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-09
        • 1970-01-01
        相关资源
        最近更新 更多