簡體   English   中英

如何獲得對象類的新實例?

[英]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.

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