เชื่อมต่อกล่องรายการที่เลือกรายการ

ฉันมีกล่องรายการใน WinForms .NET 4.5 ฉันได้รับข้อยกเว้น 'NULL' ในการแทรกอยู่เรื่อย ๆ และฉันไม่รู้ว่าทำไม ฉันมี TWEAK เป็น .dbml จาก tbl_Tweak พร้อมชุดข้อมูล ฉันพลาดบางสิ่งบางอย่างไปและไม่สามารถค้นหาอะไรหรือที่ไหนได้ ฉันหวังว่าดวงตาที่สดใสและมีประสบการณ์จะส่องสว่างที่นี่ นี่คือรหัสที่เกี่ยวข้อง

วิธีการแทรก:

public void InsertOrUpdateTweak(string recipename, string batchID, DateTime dtpTweak, int tempTweak, double specificGravityTweak, string tweakBox, string cbEventItems, int r_ID, string arrr)
        {
            TWEAKDataContext tdc = new TWEAKDataContext();
            if (dirtyTweak == true)
                try
               {
                GetEvents();

                tbl_Tweak log = new tbl_Tweak();
                log.recipename = recipeName;
                log.batchID = batchID;
                log.dtpTweak = DateTime.Now;
                log.tempTweak = tempTweak;
                log.specificGravityTweak = specificGravityTweak;
                log.tweakBox = tweakBox;
                log.cbEventItems = cbEventItems;

                tdc.tbl_Tweak.InsertOnSubmit(log);
                tdc.SubmitChanges();
            }
            catch (Exception ex)
            {
                throw ex;  //<== This is where it breaks
            }
            try
            {
                MessageBox.Show("You have not loaded and/or saved the current recipe data");
            }
                finally
                {
                    tdc.SubmitChanges();
                }
            }
    }

วิธีการ GetEvents ที่ฉันพยายามใส่รายการที่เลือกจากกล่องรายการลงในสตริง:

public string GetEvents()
{
        string[] arrr = new string[listBoxEvents.Items.Count];
        listBoxEvents.SelectedItems.CopyTo(arrr, 0);
        cbEventItems = string.Join("-", arrr);
        return cbEventItems;
}

ฉันได้ค้นหา SO และพบรูปแบบต่างๆ มากมายที่ฉันแสดงด้านล่าง:

public string[] GetEvents()
{
String[] cbEventItems = new String[listBoxEvents.SelectedItems.Count];
for (int i = 0; i < totalEvents; i++)
{
   var arrr = String.Join(Environment.NewLine, listBoxEvents.SelectedItems.Cast<string>());
}
return arrr;
}

และ...

public string[] GetEvents()
{
string[] arrr = new string[listBoxEvents.SelectedItems.Count];
for (int i = 0; i < listBoxEvents.SelectedItems.Count; i++)
arrr[i] = listBoxEvents.SelectedItems[i].ToString();

return arrr;
}

และนอกจากนี้ยังมี...

public string GetEvents()
{
    List<string> arrr = new List<string>(listBoxEvents.SelectedItems.Count);
    foreach (string listitem in listBoxEvents.SelectedItems)
    {
        cbEventItems = string.Join("-", arrr);
    }
    return cbEventItems;
}

person DV8DUG    schedule 24.05.2016    source แหล่งที่มา
comment
ดูเหมือนว่าอาจมีความสับสนในการใช้พารามิเตอร์เมธอดและตัวแปรฟิลด์ที่เรียกว่า cbEventItems สตริงไม่เปลี่ยนรูปซึ่งอาจทำให้เกิดปัญหาได้เช่นกัน ลองลบพารามิเตอร์ cbEventItems ออกจากลายเซ็นเมธอด InsertOrUpdateTweak แล้วลองทำดู   -  person RobCroll    schedule 25.05.2016
comment
เพิ่มคำตอบอย่างเป็นทางการแล้วฉันจะ +1 คุณ ขอบคุณมาก ๆ. ฉันรู้สึกเหมือนเป็น n00b   -  person DV8DUG    schedule 25.05.2016


คำตอบ (1)


ดูเหมือนว่าอาจมีความสับสนในการใช้พารามิเตอร์เมธอดและตัวแปรฟิลด์ที่เรียกว่า cbEventItems สตริงไม่เปลี่ยนรูปซึ่งอาจทำให้เกิดปัญหาได้เช่นกัน ลองลบพารามิเตอร์ cbEventItems ออกจากลายเซ็นเมธอด InsertOrUpdateTweak แล้วลองทำดู

เมื่อเห็นว่าเมธอด GetEvents ส่งกลับสตริง ฉันจะสร้างตัวแปรเมธอดแล้วใช้สิ่งนั้นเพื่อทำให้โค้ดอ่านง่ายขึ้น

public void InsertOrUpdateTweak(string recipename, string batchID, DateTime dtpTweak, int tempTweak, double specificGravityTweak, string tweakBox, int r_ID, string arrr)
        {
             ...
             string eventItems = GetEvents();
             ...
             log.cbEventItems = eventItems;
             ...
        }
person RobCroll    schedule 25.05.2016