1

我试图对不存在的客户 ID 进行验证。如果 ID 存在,则报表将显示该 ID 的记录,如果不存在,则提示错误。但即使我尝试输入存在的客户 ID,也会提示错误。

错误:对象引用未设置为对象的实例。

string sql = "SELECT whbal.customer, customer.imp_license_no, customer.psq_level, " +     
"CONVERT(DECIMAL(8,3),SUM(CASE WHEN whbal.warehouse='SKW' THEN (CONVERT(DECIMAL(8,3),whbal.qty_good) +     CONVERT(DECIMAL(8,3),whbal.qty_slack)) * CONVERT(DECIMAL(8,3),whbal.std_weight) /1000 ELSE 0.0 END)) AS SENOKO, " +

  "FROM customer INNER JOIN whbal ON whbal.customer=customer.customer AND whbal.date_create<=@date1 " +
  "INNER JOIN stktype ON whbal.stock_type=stktype.stock_type " +
  "WHERE whbal.customer BETWEEN @cust1 AND @cust2 AND whbal.stock_type=@type " +
  "GROUP BY whbal.customer, customer.imp_license_no,customer.psq_level";

    SqlCommand custcom = new SqlCommand(sql, myconnection);

    custcom.Parameters.AddWithValue("@cust1", cboFrom.SelectedValue.ToString());
    custcom.Parameters.AddWithValue("@cust2", cboTo.SelectedValue.ToString());
    custcom.Parameters.AddWithValue("@type", cboStk.SelectedValue.ToString());
    custcom.Parameters.AddWithValue("@date1", dateTimePicker1.Value);

    SqlDataAdapter da = new SqlDataAdapter(custcom);
    DataSet1 ds = new DataSet1();
    da.Fill(ds, "customer1");

    DataTable dt = new DataTable();
    da.Fill(dt);

    myconnection.Close();
    if (dt.Rows.Count > 0)
    {     
           code...
    }
    else if (dt.Rows.Count <= 0)
    {
        MessageBox.Show("Customer not existed.");
    }

有谁知道是什么问题,请指导和建议。

4

2 回答 2

1

在这里解释答案:

原因cboFrom.SelectedValue.ToString()来自组合框。如果要使用 DisplayMember 和 ValueMember 属性,则必须设置 Combobox 控件的 DataSource 属性。如果您当前使用 comboBox1.Items.AddRange 添加查找只是尝试替换comboBox1.Items.AddRange(Lookup); comboBox1.DataSource=Lookup;

或者,如果您可以执行以下相同的操作,则可以解决此问题。

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            List<MyListItem> item = new List<MyListItem>();
            item.Add(new MyListItem{Text = "A", Value ="1"});
            item.Add(new MyListItem { Text = "B", Value = "2" });
            item.Add(new MyListItem { Text = "C", Value = "3" });
            comboBox1.DataSource = item;
            comboBox1.DisplayMember = "Text";
            comboBox1.ValueMember = "Value";
        }

        private void button1_Click(object sender, EventArgs e)
        {
            // This one not throw the null refference exception
            var ss = comboBox1.SelectedValue.ToString();
        }
    }
    struct MyListItem
    {
        public string Text { get; set; }
        public string Value { get; set; }
    }
于 2013-11-06T05:52:10.227 回答
1

组合框,您似乎正在使用窗口应用程序。如果要考虑输入值,请尝试使用 SelectedText,否则如果可以省略手动输入,建议避免这种情况。

于 2013-11-06T01:11:43.660 回答