【问题标题】:Pushing values from DataView built on one Windows Form to another Windows Form将基于一个 Windows 窗体构建的 DataView 中的值推送到另一个 Windows 窗体
【发布时间】:2018-05-13 13:25:34
【问题描述】:

我有 2 个窗体。一个带有 datagridview 和按钮的表单,另一个带有标签的表单。或多或少像主细节设计。我在数据库中有 2 个相关表。我可以用主表中的数据很好地填充 datagridview。首先,我在 datagridview 上选择数据,然后我想使用按钮来显示位于另一个表单上的标签上的值。

一旦数据加载到datagridview;我将以下代码用于根据从 datagridview 中进行的选择来过滤基础表的方法:

[form 2]
public DataView EnterpriseView()
    {
        foreach (DataGridViewRow row in Viewer.SelectedRows)
            identifier = row.Cells["BusinessName"].Value.ToString();

        var EnterpriseVw = new DataView(EnterpriseDT)
        {
            RowFilter = "BusinessName = '" + identifier + "'"
        };

        return EnterpriseVw;
     }

返回视图后,我想使用按钮将信息推送到另一个具有标签的表单。我不确定如何让这个工作。我尝试了自己的不同代码,但它不起作用

我的问题是如何编写 button_click 事件。是否有另一个事件我需要调用它才能工作?按钮如何知道我是否在 datagridview 上选择了某些内容? datagridview 怎么知道我点击了按钮?我为按钮系了这样的东西:

[form 2]
private void button1_Click(object sender, EventArgs e)
    {
        index = Viewer.SelectedRows[0].Index;

        Viewer.Rows[index].Selected = true;

        //EnterpriseView();
        //DetailsView();
        //this.Click += new EventHandler(Viewer_SelectionChanged);

        if (Viewer.Rows[index].Selected == true)
        {
            var frm1 = new form1(); //form with labels
            //foreach(DataGridViewRow row in Viewer.SelectedRows)         
            frm1.Publish();  //method that assigns data to labels
        }

没用

我尝试在标签上使用类似这样的东西:

[form 1]
public void Publish()
    {
        var frm2 = new form2();
        var vEnterprise = frm2.EnterpriseView();

        Email.DataBindings.Add("Text", vEnterprise, "EmailAddress");
}

【问题讨论】:

  • 您可以在第二个表单上声明一个构造函数或一些静态字段并传递详细信息。
  • 我相信您的意思是用于为标签分配值的静态字段?你能提供一个代码示例吗?对按钮单击事件进行编码怎么样?
  • 将值从一种形式传递到另一种形式不是问题吗?
  • 刚刚编辑显示表单名称,我现在如何布置代码。这样,如果我做错了什么,您可以轻松地提供帮助
  • @ZohirSalakCeNa。谢谢。我会尝试使用静态字段。

标签: c#


【解决方案1】:

要从 DataGridView 的选定行中获取值,您需要更改一些属性:

首先您需要将SelectionMode设置为FullRowSelect

第二你需要将MultiSelect设置为False

您可以通过属性选项卡进行操作。

然后我们可以使用dataGridView1.SelectedRows,它会返回DataGridViewSelectedRowCollection一个选定行的列表,但是由于我们禁用了multiSelect,所以总是只有一个,所以我们可以使用[0]

现在在 Button_click 事件处理程序中

private void button1_Click(object sender, EventArgs e)
{   
   // To Get The Selected Row
   var  dr =  dataGridView1.SelectedRows[0];

   // The Cells Property is going to return DataGridViewCellCollection a list again
   // Basically the columns so the first one will be the first column and so on
   string item1 = dr.Cells[0].Value.ToString();
   string item2 = dr.Cells[1].Value.ToString();
   string item3 = dr.Cells[2].Value.ToString();
}

在带有标签的表单中定义第二个构造函数。

假设我们有 3 个标签

我们要定义第二个构造函数,它接受 3 个字符串,就像这样

public TheSecondForm(String S1, String S2,String S3) 
{
    label1.Text = S1;
    label2.Text = S2;
    label3.Text = S3;         
}

那么按钮事件句柄会变成这样:

private void button1_Click(object sender, EventArgs e)
{   
   var  dr =  dataGridView1.SelectedRows[0];

   string item1 = dr.Cells[0].Value.ToString();
   string item2 = dr.Cells[1].Value.ToString();
   string item3 = dr.Cells[2].Value.ToString();

   // What was added
   TheSecondForm frm2 = new TheSecondForm(item1, item2, item3);
   frm2.Show();
}

到现在标签将被填充。

【讨论】:

  • 谢谢。我明白了。如果我设法解决问题,会通知您。您能协助处理 button_click 事件吗?帮助使用按钮在 datagridview 上选择一行。首先,我使用箭头突出显示行,然后单击按钮以使用该行执行代码。如何使用按钮单击事件中突出显示的行或选定行?
  • 我没有完全得到你想要的,是不是你想选择一行然后点击一个按钮,然后该行的所有信息都被传递到另一个表单?
  • 是的,这就是我想要的。我明白了构造函数和静态字段的想法。但是我需要帮助编码按钮单击事件以了解或意识到我在 datagridview 中突出显示了一行。在我使用箭头突出显示或选择 datagridview 中的行后,如何与该特定行交互?我上面显示的按钮单击事件代码不起作用。我从构造的数据视图中得到一个空结果。在与行交互时,我没有做一些事情。我得到 System.IndexOfRangeException(索引 0 为负数或高于行数)
  • datagridview 已填充。但是当我在过滤数据表(使用 EnterpriseView 方法)之后使用带有上面代码的按钮来测试构造 DataView 时,我得到一个空的 DataView !我认为问题在于按钮单击事件中的选择代码。协助解决这里
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-21
  • 1970-01-01
相关资源
最近更新 更多