[英]How to get new instance of object class?
首先,我的編程概念不是很好,所以我什至不確定我的問題是否選擇了正確的單詞。 無論如何,這是我面臨的問題:
private void gridCommsEqp_OnSelectionChanged(object sender, SelectionChangeEventArgs e)
{
var temp = (CommsEqp) gridCommsEqp.SelectedItem;
var commItems = new List<CommsItem>(issueAdapt.getCommsItemsByEqpID(temp.EqpID));
}
在這里,我試圖根據通過我的DataGrid選擇的設備(只能選擇一個)獲得正確的Comms項目。 每當選擇更改時,它將更新與該裝備相對應的新項目集。
這是我的“ getCommsItemsByEqpID”方法:
public IEnumerable<CommsItem> getCommsItemsByEqpID(int eqpID)
{
DataTable commItem = issueTransactions.getCommsItemsByEqpID(eqpID);
var listCommsItems = new List<CommsItem>((from DataRow row in commItem.Rows
select new CommsItem((int)row["ItemID"],
(string)row["cardNO"],
(string)row["serial"])).ToList());
return listCommsItems;
}
問題是每次選擇更改時,我的代碼都會繼續添加到列表中,而不是獲取新實例。 因此,例如,在我多次單擊數據網格的不同行來進行選擇之后,我將獲得之前選擇的所有行的多個equipID的列表。 如何避免這種情況?
盡管我可以立即分配該列表,但是我嘗試創建新實例以查看它是否有幫助,如上所示。 我還認為“選擇新的CommsItem”將創建對象類的新實例,因此不會保留以前的記錄。 但這仍然給了我所有以前選擇的項目的組合列表。
先謝謝您的幫助!
編輯:按要求顯示更多代碼
public DataTable getCommsItemsByEqpID(int eqpID)
{
var sqlString = String.Format("SELECT ItemID, cardNo,
serial FROM tblCommsItem WHERE EqpID = {0}", eqpID);
establishDB(sqlString);
ad.Fill(ds, "CommsItems");
conn.Close();
return ds.Tables["CommsItems"];
}
private void establishDB(string sqlString)
{
command.CommandText = sqlString;
conn = connectDB();
ad.SelectCommand = command;
command.Connection = conn;
}
private static SqlConnection connectDB()
{
var conn = new SqlConnection();
string connString = ConfigurationManager.ConnectionStrings["SecureDB"].ToString();
conn.ConnectionString = connString;
conn.Open();
return conn;
}
編輯2:顯示更多代碼:
private void gridCommsEqp_OnSelectionChanged(object sender, SelectionChangeEventArgs e)
{
var temp = (CommsEqp) gridCommsEqp.SelectedItem;
var commItems = new List<CommsItem>(issueAdapt.getCommsItemsByEqpID(temp.EqpID));
if (commItems[0].CardNO == "" && commItems[0].Serial == "")
{
gridCommsItem.Columns.Clear();
gridCommsItem.MaxColumnWidth = Double.PositiveInfinity;
var gridColumn = new GridViewColumn{Header = "This item is not serialized. You can directly select the quantity.", Width = gridCommsItem.Width - 50, HeaderTextAlignment = TextAlignment.Center};
gridCommsItem.Columns.Add(gridColumn);
gridCommsItem.ShowGroupPanel = false;
gridCommsItem.IsEnabled = false;
}
}
我懷疑的問題可能是您沒有在每次填充之前清除DataSet和DataTable中的數據。 因此,在將數據填充到DataSet中之前,請清除DataSet和DataTable中的內容。
原因是此行:
ad.Fill(ds, "CommsItems");
在此處設置調試器斷點。 每次單擊后,您將看到更多的累積記錄。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.