2017-07-06 56 views
0

我正在尋找一種方法來動態設置變量名稱和值從數據庫中獲取的變量列表的值。設置變量值的名稱是通過C#中的字符串傳遞

我發現了很多用於獲取變量名稱和值的代碼,但沒有用於設置值的代碼。

我會盡力解釋自己。 認爲有一個包含兩列的數據庫,稱爲「名稱」和「值」。 說,例如,你有兩個記錄:

1)名稱= 「字符串1」,值= 「MESSAGE1」 2)名稱= 「字符串2」,值= 「消息2」

我的代碼閱讀兩條記錄,我想要的是一種方法,從記錄中獲取變量的名稱併爲其分配相應的值。

的代碼是這樣的:

SqlCommand cmd = new SqlCommand("Select Name, " + lng + " from dbo.traductions", Global.languageconn); 
SqlDataReader dr = cmd.ExecuteReader(); 
while (dr.Read()) 
{ 
    var v1 = dr["Name"].ToString(); 
    var v2 = dr[lng].ToString(); 

    //Something here to assign the value stored in v2 to the variable whose name is stored in v1 

} 

謝謝大家

+0

爲什麼不只是創建了「名」和「價值」領域類,並閱讀您的SQL數據到那裏? –

+0

因爲我的變量在第二時間將成爲組件的名稱。 例如,在數據庫中,我就必須記錄是這樣的: NAME = 「TextBox1的」,值1 = 「插入你的名字」,值2 = 「Entrez的VOTRE NOM」,值3 = 「geben SIE Ihren Namen」,值4 =」 Inserisci il tuo nome「 並且,根據我要讀取的值,相應的組件必須採用該值(本例中爲消息)。 所以我需要一段代碼,它允許我引用從包含「textbox1」的變量傳遞的textbox1。 所以我需要一些東西,這取決於db的查詢結果dinamically。 –

+0

或者您可以在這些記錄上設置語言標誌,在類中包含語言字段,然後相應地選擇適當的對象。 –

回答

1

我不知道你爲什麼會想這樣做,但爲什麼不使用一本字典?

SqlCommand cmd = new SqlCommand("Select Name, " + lng + " from dbo.traductions", Global.languageconn); 
SqlDataReader dr = cmd.ExecuteReader(); 
var variables = new Dictionary<string, string>(); 
while (dr.Read()) 
{ 
    var v1 = dr["Name"].ToString(); 
    var v2 = dr[lng].ToString(); 
    variables.Add(v1, v2); 
} 

然後使用它們:

var x= variables[v1]; 

更新:

我看你加了註釋說你需要參考的對象。您可以改變字典來保存對象。你沒有提到的類型所以爭論的緣故,我將承擔他們所有文本框:

SqlCommand cmd = new SqlCommand("Select Name, " + lng + " from dbo.traductions", Global.languageconn); 
    SqlDataReader dr = cmd.ExecuteReader(); 
    var variables = new Dictionary<string, object>(); 
    while (dr.Read()) 
    { 
     var v1 = dr["Name"].ToString(); 
     var v2 = dr[lng].ToString(); 
     var textbox = new TextBox() { Text = v2 }; 
     variables.Add(v1, textbox); 
    } 

然後通過名字來使用它們:

var textbox= variables[v1]; 
+0

他們主要是文本框,標籤和一定數量的按鈕和「正常」字符串變量。 –

0

根據您的意見,您要訪問「按名稱控制」;這是實現與Controls.Find()

Control ctl = this.Controls.Find(v1, true).FirstOrDefault(); 
if (ctl != null && ctl is TextBox) 
{ 
    TextBox tb = (TextBox)ctl; 
    tb.Text = v2; 
}