将datagridview值传递给另一个表单

时间:2016-03-31 21:47:16

标签: c# winforms datagridview

我希望将datagridview值传递给另一个表单进行编辑。我可以找到许多代码背后的示例,但我似乎无法找到一个将代码从代码中删除的示例。

我的示例代码

ProductView productView = new ProductView();

productview.txtbox1.Text = this.dataGridView1.CurrentRow.Cells[1].Value.ToString();
productview.txtbox2.Text = this.dataGridView1.CurrentRow.Cells[2].Value.ToString();
productview.txtbox3.Text = this.dataGridView1.CurrentRow.Cells[3].Value.ToString();
productview.txtbox4.Text = this.dataGridView1.CurrentRow.Cells[0].Value.ToString();
productview.ShowDialog();

这是允许放入代码的东西吗? 我尽量把代码放在后面,只有必要的东西。

2 个答案:

答案 0 :(得分:0)

取决于您如何定义"允许"。它的工作原理使编译器和.NET框架允许这样做,但这是一个好习惯吗?那么你需要以某种方式通过它,但让我们从开始

开始
  1. 不要将文本框命名为" textbox1"给他们一个名字,其行为意味着像" tbName"或" nameTextbox"或任何自我解释的东西。
  2. 如果ProductView Form专门用于显示此详细信息,我将为此类创建一个构造函数,该构造函数完全接受这些参数(最好是作为类)。 因此,例如,我将在下面的某个独立项目中创建一个新类。
  3. public class ProductViewOptions
    {
        public string ProductName{ get; set; }
        public decimal ProductPrice { get; set; }
        ...
    }
    

    稍后在ProductView表单中创建一个上述类型的私有属性,并创建一个接受此类型参数的构造函数。它可能如下所示:

    public class ProductView : Form
    {
        private ProductViewOptions productOptions;
        public ProductView(ProductViewOptions ProductOptions)
        {
             this.productOptions = ProductOptions;
        }
        ...
    }
    

    多亏了这一点,您的代码将更具可读性,您的示例将如下所示:

    ProductViewOptions productOptions = new ProductViewOptions ();
    productOptions.ProductName = this.dataGridView1.CurrentRow.Cells[1].Value.ToString();
    productOptions.ProductPrice = this.dataGridView1.CurrentRow.Cells[2].Value.ToString();
    
    ProductView productView = new ProductView(productOptions);
    productView.ShowDialog();
    

    新的代码片段是自我解释的,易于阅读和维护。

答案 1 :(得分:0)

假设您设置了DataGridView SelectionMode = FullRowSelect,则可以通过以下方式实现:

ProductView productView = new ProductView();
productview.txtbox1.Text = this.dataGridView1.SelectedRows[0].Cells["columnName1"].Value.ToString();
productview.txtbox2.Text = this.dataGridView1.SelectedRows[0].Cells["columnName2"].Value.ToString();
productview.txtbox3.Text = this.dataGridView1.SelectedRows[0].Cells["columnName3"].Value.ToString();
productview.txtbox4.Text = this.dataGridView1.SelectedRows[0].Cells["columnName4"].Value.ToString();
productview.ShowDialog();