【问题标题】:How do I access DataGridView from another form?如何从另一个表单访问 DataGridView?
【发布时间】:2015-11-04 17:58:45
【问题描述】:

我想从另一个表单访问 DataGridView。我只想从 DataGridView 中获取一个值并将其显示在另一个表单中的文本框中。

如图所示: 我单击 Edit line 按钮并弹出 Form2,因此当我单击 button1 时,textbox1 应该具有 row[0] cell[0] 的值(即“1”),但我得到了这个错误: mscorlib.dll 中发生了“System.ArgumentOutOfRangeException”类型的未处理异常。

附加信息:索引超出范围。必须为非负数且小于集合的大小。

我有什么遗漏吗?我做了 DataGridView Modifiers = Public 但仍然没有工作。请帮忙谢谢。

【问题讨论】:

  • 请粘贴您的代码,而不是您的代码截图。
  • 永远不要访问SelectedRows而不检查是否有任何选定的行!此外,您的新表单 1 就是:new,而不是另一个! Eric 向您展示了一种传递参考的常用方法。除了 DGV,您还可以传递 form1 本身!!
  • TaW,我很困惑,请您解释一下有关传递参考的更多信息,或者请给我看一个例子。谢谢

标签: c#


【解决方案1】:

SelectedRows 指的是选中的行。您应该改用Rows 属性。

【讨论】:

  • Ryck,我将它从 SelectedRows 更改为 Rows 但仍然无法正常工作。有什么建议吗?谢谢
  • 是的。我看到您正在创建一个新的 Form1 对象。您需要引用您从中创建 Form2 对象的那个。一种方法是在创建 Form2 时传递一个引用。您可以添加一个接受 Form1 引用的构造函数,然后将其保存为类成员。有“更好”的方法可以做到这一点,但您并不是在要求设计模式教程。
  • 我一直在搜索和阅读您所说的内容,但我很困惑。你能解释更多或举个例子吗?我想要的是:将一个值从 form1 中的 DataGridView 传递到 form2 中的文本框。谢谢
【解决方案2】:
  1. 在Form2中创建属性

    public int Qty {get; set;}

  2. 2.

  private void Edit_Line_Click(object sender, EventArgs e)   
  {
     Form2 frm2 = new Form2();
        frm2.Qty=this.dataGridView1.SelectedRows[0].Cells[0].Value.ToString();
     if(frm2.ShowDialog()==DialogResult.OK)
     {
        this.dataGridView1.SelectedRows[0].Cells[0].Value = frm2.textBox1.Text;
     }
  }

这只是一个想法,您必须解决问题才能获得准确的输出。

【讨论】:

    【解决方案3】:

    对我来说试试这个工作。

    享受……!!!

    我选择了包含 Anjum 文本的行 输出

    同样:

    代码表格1

    using System;
    using System.Windows.Forms;
    
    namespace DataGridViewCellAcessing
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                dataGridView1.Rows.Add(new string[] {
                        "Anjum"});
                dataGridView1.Rows.Add(new string[] {
                        "Khuram"});
                dataGridView1.Rows.Add(new string[] {
                        "Shahzad"});
            }
    
           
    
            private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
            {
                Form2 form2 = new Form2();
                form2.Edit(dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString());
       
                form2.Show();
            }
        }
    }
    

    代码表格2

    using System;
    using System.Windows.Forms;
    
    namespace DataGridViewCellAcessing
    {
        public partial class Form2 : Form
        {
            public Form2()
            {
                InitializeComponent();
            }
    
            private void Form2_Load(object sender, EventArgs e)
            {
              
            }
            public void Edit(string Values) {
               
                    textBox1.Text = Values;
    
               
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-23
      • 2013-03-20
      • 2012-06-08
      • 2012-05-25
      • 2015-01-16
      • 1970-01-01
      相关资源
      最近更新 更多