2017-04-24 75 views
0

我有一個表單,其中包含引用表的按鈕並且按鈕表示表。默認的按鈕圖像是免費的,我希望按鈕圖像根據數據庫表中的「free」或「busy」值進行更改,並且我知道代碼中存在錯誤。根據數據庫更改按鈕圖像

如何讓這個工作?

編輯:

我已經取代了自定義按鈕的默認股票按鈕現在它給什麼,我檢查了查詢的結果,這是正確的,但沒有什麼變化,沒有錯誤。

我的表如下:

| tablenum | tabestatusint | 
|----------|---------------| 
| 1  | 0    | 
| 2  | 1    | 
| 3  | 1    | 

所以,如果tabestatusint0應該改變形象

這是我曾嘗試:

public void checkSuites() 
{ 
    Dictionary<int, Control> btnList = new Dictionary<int, Control>(); 
    btnList.Add(1, Button1); 
    btnList.Add(2, Button2); 

    SqlCommand checkSuite = new SqlCommand(
          "SELECT tablestatusint FROM tablesstatustbl", cn); 
    SqlDataReader readSuite = checkSuite.ExecuteReader(); 
    while (readSuite.Read()) 
    { 
    int suiteIndex = Convert.ToInt32(readSuite["tblstatusint"]); 
    string suitePath = "tblstatusint" + suiteIndex; 
    foreach (Button key in btnList.Values) 
    { 
     if (key.Name == suitePath) 
     { 
     key.Image = My_Café_Manger.Properties.Resources.tablesbusy; 
     } 
    } 
    } 
} 
+1

當應用程序崩潰時,您應該在事件日誌中獲取堆棧跟蹤。請在您的問題中包含該堆棧跟蹤。 –

+0

名稱'btnList'與它的類型不是很相關 – dcg

+0

@Renato Parreira你能幫我解決這個問題嗎 –

回答

1

首先你不需要迭代字典以訪問正確的按鈕。這是字典的重點。其次調用你當前的元素「關鍵」是令人困惑的,因爲它意味着它是字典關鍵。第三,你將比較你的按鈕的名稱(我看不到你曾經設置過)與字符串「tblstatusintX」,其中X是來自數據庫的值。第四套房指數被錯誤地命名,因爲我認爲它是真實/虛假的狀態值而不是索引。第五,我認爲你的第二列名稱中的錯字應該是'tablestatusint'。注意你的問題中缺失的字母'l'。最後,您還錯過了SQL查詢中的tablenum列。

我想你需要的東西是這樣的:

SqlCommand checkSuite = new SqlCommand("SELECT tablenum, tablestatusint FROM tablesstatustbl", cn); 
SqlDataReader readSuite = checkSuite.ExecuteReader(); 
while (readSuite.Read()) 
{ 
    int status = Convert.ToInt32(readSuite["tblstatusint"]); 
    if (status == 1) 
    { 
    // I have separated the dictionary access and image assignment into two lines for readability 
    int buttonNum = ConvertToInt32(readSuite["tableNum"]); 
    btnList[buttonNum].Image = My_Café_Manger.Properties.Resources.tablesbusy; 
    } 
} 

這是非常「aircode」,但它應該讓你去一次。您可能還想查看this的問題。

+0

首先非常感謝你的回答和你的時間我用詞典來提高性能,因爲我可能會有很多按鈕..我仍然有紅色下劃線下:readSuite [「tableNum」]說:不能從對象轉換爲int –

+0

@Ahmed_Zoeil是的,我後來意識到你爲什麼使用字典和修改我的答案。嘗試'readSuite [「tableNum」]。值' – Caltor

+0

我stil得到紅色下劃線錯誤。'。value'說:對象不包含值的定義和方法值的擴展接受對象的第一個參數可以找到 –