c#使用不同形式的变量

本文关键字:变量 | 更新日期: 2023-09-27 18:12:19

在form1 dataGridView1_CellDoubleClick中,我有一个变量SelectedID,它从datagridview1获得值。我想在Form2DataSetFunction()中的DataAccesssqlCommand中使用该值。然后在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];
    } 
    }
    }

c#使用不同形式的变量

add

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

use _tableId in Form2DataSetFunction function

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();

这似乎是一个经典的"Master-Details"类型的操作。我已经发布了解决方案的SqlDataSource/GridView控件包含在ASP。净(链接)。

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

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"]);
   }
}

希望这能帮到你。认为,亚历克斯

p。下面是上面描述的嵌套GridView控件的一个示例:demo

我可以建议你两个选择一个是在你的构造函数Form2:

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

但在此之前,form2中有一个用于SelectID的私有变量,比如

  String SelectID

那么,你现在有:

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

之后,如果你想调用Form2DataSetFunction(),你可以使用下面的代码:

  Form2DataSetFunction(passID);
另一种方法是在表单中创建一个Property,比如
public String passSelectID { get; set; }

那么当你初始化form2时你可以说:

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