显示意外数据的数据集

本文关键字:数据集 数据 意外 显示 | 更新日期: 2023-09-27 18:24:09

我有两个ListBoxes和五个textBox。在ListBox_prod中,我想检索所有产品(从product表),在Listbox_item中,我要检索表单加载事件中与所选产品对应的所有项目(从PRODITEM表)。所有产品都有1个以上的相关项目。Listbox_item出现问题,因为它只显示了一个项目。但我希望在选择特定产品时,所有项目都显示在Listbox_item中。DBCommands类中的getData()实际上导致了该问题。这是我的代码:

public partial class form_prodItems : Form
{       
       private DBCommands dBCommand;
     public form_prodItems()
    {
        InitializeComponent();
        listBx_prod.SelectedIndexChanged += new EventHandler(listBx_prod_selValChange);
        listBx_item.SelectedIndexChanged += new EventHandler(listBx_item_selValChange);
    }
   private void form_prodItems_Load(object sender, EventArgs e)
     { 
        // ...
        refresh_listBx_prod("PRODUCT", this.listBx_prod, null, null);
        refresh_listBx_prod("PRODITEM", this.listBx_item, listBx_prod.ValueMember,   listBx_prod.SelectedValue.ToString());
    }
    private void listBx_item_selValChange(object sender, EventArgs e) // causing problem
    {
        if (listBx_item.SelectedValue != null)
            showPrice("PRODITEM", listBx_item.ValueMember, listBx_item.SelectedValue.ToString());
    }
    private void listBx_prod_selValChange(object sender, EventArgs e)
    {
        if(listBx_prod.SelectedValue != null)
           refresh_listBx_prod("PRODITEM", this.listBx_item, listBx_prod.ValueMember, listBx_prod.SelectedValue.ToString());
    }
    private void showPrice(string tblName,string where_column ,string where_val)
    {
        DataSet ds;
        ds = dBCommand.getData("select * from " + tblName + " WHERE " + where_column + " = '" + where_val + "'");
        DataRow col_val = ds.Tables[0].Rows[0];
        txtBox_12oz.Text = col_val.ItemArray[3].ToString();
        txtBox_16oz.Text = col_val.ItemArray[4].ToString();
        txtBox_20oz.Text = col_val.ItemArray[5].ToString();
        txtBox_1lbs.Text = col_val.ItemArray[6].ToString();
        txtBox_2lbs.Text = col_val.ItemArray[7].ToString();
        //ds.Clear();
    }
    private void refresh_listBx_prod(string tblName, ListBox listBox, string where_column, string where_val)
    {
        DataSet ds = new DataSet();
        dBCommand = new DBCommands();
        if (where_column == null)
        {
            ds = dBCommand.getData("SELECT * FROM " + tblName);
        }
        else
        {
            ds = dBCommand.getData("SELECT * FROM " + tblName + " WHERE " + where_column + " = " + where_val);
        }
        listBox.DataSource = ds.Tables[0];
     //   ds.Clear();
    }
}   

public class DBCommands
{
    private SqlConnection conn;
    private SqlDataAdapter dataAdapter;
    private DataSet container;
    public DataSet getData(string selectCmd)
    {
        container.Clear();    // I guess something needs to be fixed here some where..
        conn = getConnection();
        dataAdapter.SelectCommand = new SqlCommand(selectCmd, conn);
        dataAdapter.Fill(container);
        conn.Close();
       return container;
    }
    private SqlConnection getConnection()
    {
        SqlConnection retConn = new SqlConnection("Data Source=" + Environment.MachineName + "; Initial Catalog=RESTAURANT; Integrated Security = TRUE");
        retConn.Open();
        return retConn;
    }
}

实际上,数据集会刷新它从PRODITEM获得的所有数据(SELECT*from PRODITEM,其中PRODUCT_id="1"),并显示上次执行的查询i-e中的数据(SELECT*from prodmitem,其中item_id=1)有什么建议。。

显示意外数据的数据集

我的建议是尝试通过SqlCommand运行该命令。这样你会对你得到的东西有更好的了解。使用这个例子:

    SqlCommand command = new SqlCommand(selectCmd, conn);
    SqlDataReader reader = command.ExecuteReader();
    try
    {
        while (reader.Read())
        {
            Console.WriteLine(String.Format("{0}, {1}",
                reader[0], reader[1]));
        }
    }
    finally
    {
        // Always call Close when done reading.
        reader.Close();
    }

并对其进行修改,以便根据需要返回一个表。我提供给您的原因是它很容易使用,并且您可以立即获得调试信息,帮助您理解sql错误