0

在 form1dataGridView1_CellDoubleClick我有一个变量SelectedID,它从datagridview1. 我想在我的DataAccess课堂上使用那个 Vlaue,sqlCommand它位于Form2DataSetFunction(). 然后使用Form2DataSetFunction()inForm2_Load填充 datagridview。如果我GetSelectedID(string GetID)在 DataAccess 类中创建一个方法,并将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];
    } 
    }
    }
4

3 回答 3

0

添加

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();
于 2013-05-07T03:34:28.070 回答
0

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

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

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

于 2013-05-07T03:35:39.747 回答
0

我可以建议您两种选择,一种是在 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();
于 2013-05-07T03:38:07.380 回答