将数据从类发送到winform

时间:2014-02-10 04:03:41

标签: c# sql sql-server winforms tsql

我正在使用Winforms和C#开发应用程序。我有一个类,它将获取一个表的主数据。该类中的函数执行一个存储过程,该过程返回2列数据。

我有一个表单,它有一个Listbox控件,TextBox和ComboBox。我想:

  • 在列表框中显示第1列的完整数据。
  • 在文本框中显示第1列所选行值,在所选行的组合框中显示第2列值。值基于列表框中的选择更改而更改。

使用存储过程获取数据的代码:

public void GetDeity()
{
        cmd = new SqlCommand();
        cmd.Connection = conDB;
        cmd.CommandType = System.Data.CommandType.StoredProcedure;
        cmd.CommandText = "get_DeityMaster";
        cmd.ExecuteNonQuery();

        return;
}

ListBox Name: lstDeityList
TextBox Name: txtDeityName
ComboBox Name: cmbDeityCategoryName

请帮助您了解如何传递数据。感谢

3 个答案:

答案 0 :(得分:1)

你需要从你的方法返回数据,如下所示,目前你的方法什么都不返回。

您可能需要更改方法实现以返回DataTable或DataSet

public DataTable GetDeity()
{
    using(SqlConnection sqlConn = new SqlConnection(conSTR))
    using(SqlCommand cmd = new SqlCommand("get_DeityMaster", sqlConn))
    {
        cmd.CommandType = System.Data.CommandType.StoredProcedure;
        sqlConn.Open();
        DataTable dt = new DataTable();
        dt.Load(cmd.ExecuteReader());
        return dt;
    }
}

现在您可以使用上面返回的数据绑定Listbox控件,当选择项更改事件时,您可以绑定其他文本框和组合框。

在您的表单中,您可以通过创建类的对象来调用类方法,如下所示

Yourclass obj = new Yourclass();
DataTable dt= obj.GetDeity();

ListBox1.DataSource = dt;
ListBox1.DisplayMember = "Column1Name";
ListBox1.ValueMember = "Column2Name";

您需要为ListBox1

添加SelectedIndexChanged事件
private void listBox1_SelectedIndexChanged(object sender, System.EventArgs e)
{
    TextBox1.Text = ((DataRowView)ListBox1.SelectedItem).Row.ItemArray[0].ToString();
    // bind the ComboBox as well
}

答案 1 :(得分:1)

将函数的返回类型从void更改为DataTable。使用您的命令创建SQLAdapter并填写DataTable

public DataTable GetDeity()
{
DataTable mTable = new DataTable();

cmd = new SqlCommand();
cmd.Connection = conDB;
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.CommandText = "get_DeityMaster";

SqlAapter mAdapter = new SqlAdapter(cmd);
mAdapter.Fill(mTable);

return mTable
}

答案 2 :(得分:0)

为什么不在数据表中保存获取的数据。然后将该数据表的列分配给您喜欢的不同控件。

e.g。

public void GetData()
        {
            DataTable odt = new DataTable();
            odt  = obj.GetDeity();

            Combobox.DataSource = odt;
            .......... set other controls also...
        }

public DataTable GetDeity()
        {

            SqlCommand cmd = new SqlCommand("get_DeityMaster");
            cmd.CommandType = CommandType.StoredProcedure;
            return getdatatable(cmd); // YOUR DATA FETCHING LOGIC
        }