【问题标题】:C# Using Variable on Different FormC# 在不同的表单上使用变量
【发布时间】:2013-05-07 03:17:03
【问题描述】:

在 form1 dataGridView1_CellDoubleClick 中,我有一个变量 SelectedID,它从 datagridview1 获取值。我想在我的DataAccesssqlCommand 中使用那个Vlaue,它在Form2DataSetFunction() 中。然后在Form2_Load 中使用Form2DataSetFunction() 来填充datagridview。 如果我在 DataAccess 类中创建一个方法 GetSelectedID(string GetID),并将 SelectedID 值从 Form1 传递给它,那么我如何在 Form2DataSetFunction() 中使用该值。 谁能帮忙!!

表格 1 中的代码

    namespace myApplication
    {
    public partial class Form1 : Form

    {
    private void dataGridView1_CellDoubleClick
    (object sender, DataGridViewCellEventArgs e)
        {
            **string SelectedID** = 
            dataGridViewProcess.Rows[e.RowIndex].Cells[0].Value.ToString();
            Form2 Form2Obj = new Form2();
            Form2Obj.ShowDialog();

        }

DataAccess 类中的代码

    namespace myApplication
    {
    class DataAccess
    {
    public DataSet Form2DataSetFunction()
        {
                Connection details......
        SqlCommand mySqlCommand = new SqlCommand("SELECT * from myTable 
        where ID='"SelectedID"'", myobjConnection);
            fill Dataset........
        return Dataset;
        }       

表格 2 中的代码

    namespace Form2
    {
    public partial class Form2 : Form
    {
    public Barcodes()
     {
         InitializeComponent();
     }

    private void Form2_Load(object sender, EventArgs e)
    {
        DataAccess DataAccessObject = new DataAccess();
        DataSet Form2DatasetObject = 
                DataAccessObject.Form2DataSetFunction();
        dataGridViewForm2.DataSource = 
                Form2DatasetObject.Tables[0];
    } 
    }
    }

【问题讨论】:

  • 向 form2 添加公共属性。在 .Show() 之前创建 form2 时填充值

标签: c#


【解决方案1】:

添加

class DataAccess
{
   private readonly string _tableId;
   public DataAccess(stirng TableId)
   {
      _tableId = tableId;
   }
   // other stuff
}

Form2DataSetFunction函数中使用_tableId

Form2 在构造函数中也应该有参数

public class Form2
{
    private readonly DataAccess _dataAccess;

    public Form2(DataAccess dataAccess)
    {
        _dataAccess = dataAccess;
    }

    // use given _dataAccess in FormLoad instead of creating one.
}

您的处理程序中的Form1

Form2 Form2Obj = new Form2(new DataAccess(dataGridViewProcess.Rows[e.RowIndex].Cells[0].Value.ToString()));
Form2Obj.ShowDialog();

【讨论】:

  • 我想通了,您的回答有帮助,所以我将其标记为答案
  • AFAIK VS 设计器需要一个空的构造函数,所以这个建议会以令人讨厌的错误消息破坏设计器。
【解决方案2】:

这似乎是一种经典的“Master-Details”类型的操作。我已经发布了 ASP.NET (link) 中包含的SqlDataSource/GridView 控件的解决方案。

本质上,可以通过将单元格值作为参数传递来解决:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e){
  if (e.Row.RowType == DataControlRowType.DataRow)
  {
    SqlDataSource s = (SqlDataSource)e.Row.FindControl("SqlDataSource2");
    s.SelectParameters[0].DefaultValue = e.Row.Cells[0].Text;
  }
}

或使用DataKeys的更好版本

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) {
  if (e.Row.RowType == DataControlRowType.DataRow)
   {
     // find DataSource used for nested GridView (could be SqlDataSource)
     AccessDataSource s = (AccessDataSource)e.Row.FindControl("dsMusic");
     // assign parameter’s default value from the DataKeys in GridView1
     s.SelectParameters[0].DefaultValue = Convert.ToString(((GridView)sender).DataKeys[e.Row.RowIndex].Values["Composer"]);
   }
}

希望这会有所帮助。问候,亚历克斯

PS。以下是上述嵌套 GridView 控件的示例实际实现:demo

【讨论】:

    【解决方案3】:

    我可以建议您两种选择,一种是在 Form2 的构造函数中放置一个参数:

    public Form2(String passID)
        {
            InitializeComponent();
        }
    

    但在此之前,您的 form2 中的 SelectID 有一个私有变量,例如

      String SelectID
    

    所以,你现在有:

         public Form2(String passID)
        {
            InitializeComponent();
            SelectID=passID;
        }
    

    稍后如果您想调用 Form2DataSetFunction(),您可以使用以下代码:

      Form2DataSetFunction(passID);
    

    另一种方法是在您的表单中创建一个属性,例如

    public String passSelectID { get; set; }
    

    然后在初始化 form2 时,你可以说:

    Form2 Form2Obj = new Form2();
    Form2Obj.passSelectID = SelectedID;
            Form2Obj.ShowDialog();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-14
      • 1970-01-01
      • 1970-01-01
      • 2018-06-30
      • 1970-01-01
      • 2014-08-06
      相关资源
      最近更新 更多