簡體   English   中英

如何將數據表轉換為列表 <string> 然后將其與文本框值進行比較?

[英]how to convert datatable to list<string> and then compare it with a Textbox value?

我有一個DataTable->“ CheckProduct(String id),其中String ID是發票ID,用於獲取該發票的產品ID

現在,我想將其與“文本框”值進行比較。

我已經嘗試了一個代碼。

我的數據邏輯:

 public DataTable CheckProduct(String id)
        {
                DataTable dt = new DataTable();
                SqlConnection sqlconnection;
                sqlconnection = new SqlConnection(@" Database Connection String");
                sqlconnection.Open();
                SqlCommand cmd = new SqlCommand("checkproduct", sqlconnection);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@inv_id", SqlDbType.VarChar).Value = int.Parse(id);
                DataSet dtset = new DataSet();
                SqlDataAdapter adpt = new SqlDataAdapter(cmd);
                adpt.Fill(dtset);
                dt = dtset.Tables[0];

                return dt;
        }

我的業務邏輯:

  public List<String> CheckProduct(String id)
        {    
                SPDatalogic sp = new SPDatalogic(); //datalogic class
                DataTable dt = new DataTable() ;
                dt = sp.CheckProduct(id);
                List<String> list = new List<String>();                     
                SPBusinesslogic ab = new SPBusinesslogic();  //businesslogic class
                String pro;
                pro =ab.CheckProduct(id).ToString();
                list.Add(pro);    

                return list;

        }

我的演示層:

            string id = invoice_no_textbox.Text;
            SPBusinesslogic ab = new SPBusinesslogic(); //businesslogic class
            List<String> id_list = new List<String>();
           id_list = ab.CheckProduct(id);  //passing invoice_no as string id


            if (id_list.Any(x => x.Equals(invoice_no_textbox.Text)))
            {
                MessageBox.Show("the product already exist");
            }

假設您的發票ID的字段名稱稱為“ invoice_id”,我將把CheckProduct的代碼重寫為

public List<String> CheckProduct(String id)
{    
        SPDatalogic sp = new SPDatalogic(); //datalogic class
        DataTable dt = sp.CheckProduct(id);
        List<String> list = new List<String>();

        foreach (DataRow dr in dt.Rows)
        {
            list.Add(dr["invoice_id"].ToString());    
        }
        return list;
}

在您的代碼中,您遞歸調用CheckProduct方法,再次傳遞發票ID,這似乎不是退出循環的方法。 取而代之的是,從上一次對SPDatalogic類的調用中已經知道了發票的產品列表。 所以您只需要將它們添加到列表中

同樣,在DataLogic類中,參數的聲明中可能存在錯誤。 如果@inv_id為整數類型,則不要將參數聲明為VarChar

  cmd.Parameters.Add("@inv_id", SqlDbType.Int).Value = int.Parse(id);

最后一點,我不明白為什么您的ID明顯是數字時為什么要使用List<string> 這將導致類型從字符串繼續轉換為int,反之亦然。 您應該檢索List<int>並僅轉換文本框的輸入。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM