2013-10-25 22 views
0

我有一個項目,我從formview字段獲取值作爲字符串(40+字段)。我想減少我的代碼中的行數,並希望將列表值添加到單行代碼中,以便從我的formview中收集每個字符串值。是否可以在一行代碼中動態添加List <string>值?

我的代碼剪斷是:

... 
List<string> mylist = new List<string>(); 

string str1 = e.NewValues["value1"].ToString(); 
myList.Add(str1); 
string str2 = e.NewValues["value2"].ToString(); 
myList.Add(str2); 
string str3 = e.NewValues["value3"].ToString(); 
myList.Add(str3); 
string str4 = e.NewValues["value4"].ToString(); 
myList.Add(str4); 
... 

是否有可能在短短的一行代碼類似於添加這些字符串:

myList.Add(string str1 = e.NewValues["value1"].ToString()); 

myList.Add((string) something... not getting the correct format. 

我已經做了與sql參數類似的東西 即 -

cmd.Parameters.Add(new OleDbParameter("ENTRY", OleDbType.VarChar) 
{ 
    Value = ENTRY, 
    Direction = ParameterDirection.Input 
}); 

- 但我搜索了很多方法試圖做到這一點,什麼都沒有出現。我不確定我是不是正確地搜索它,或者它是不可能的?

+0

myList.Add(e.NewValues [「value1」]。ToString()); – Kurubaran

+0

呃!我一直在想辦法太過艱難和過分複雜。你的所有答案都可以工作。感謝您的快速回復。 – acjohnson72

+0

什麼是NewValues?清單? – terrybozzio

回答

1

試試這個:

myList.Add(e.NewValues["value1"].ToString()); 
4
List<string> mylist = new List<string> 
{ 
    e.NewValues["value1"].ToString(), 
    e.NewValues["value2"].ToString() 
    //etc... 
}; 

使用Object Initializer會讓你建立的對象,當您進行初始化。

舉例來說,如果你有一個類:

class Test 
{ 
    string test1 { get; set; } 
    int test2 { get; set; } 
} 

可以初始化它想:

Test tester = new Test{ test1 = "some string", test2 = 5 }; 
1

你可以使用

myList.AddRange(
    new[]{ 
     e.NewValues["value1"].ToString(), 
     e.NewValues["value2"].ToString() 
}); 

或使用inline分配:

List<string> mylist = new List<string> 
{ 
    e.NewValues["value1"].ToString(), 
    e.NewValues["value2"].ToString() 
}; 
2

使用Linq怎麼樣?

喜歡的東西:

List<string> mylist = new List<string>(); 

myList.AddRange(e.NewValues.ToList().Select(s => s.ToString()); 

e.NewValues.ToList().ForEach(v => 
         { 
          //can add additional manipulation or If clause here 
          //if you have some exclusions 
          myList.Add(v.ToString()) 
         }); 
0

NewValues是一個字典,以便這樣將在一個班輪工作:

List<string> mylist = e.NewValues.Values.ToList().ConvertAll(x => x.ToString()); 

更新:

什麼NewValues re原來是這樣orderedDictionary裏面你的事件處理程序發生此代碼:

List<string> mylist = new List<string>(); 

foreach (DictionaryEntry item in e.NewValues) 
{ 
    mylist.Add(item.Value.ToString()); 
} 

,或者如果MYLIST是類成員變量然後就foreach循環將填充列表。

+0

ToList不是值之後的選項,但是如果... Values.ToString()。ToList()...被添加,但它不會返回我正在查找的字段值。 FormView還具有標籤和下拉列表,我可以從db中獲取值並更新記錄。如果我可以在一行中從formview中獲得所有的控件值,那就太棒了!我使用'(Object sender,FormViewUpdateEventArgs e)' - 如果有更好的方法,我是開放的。 – acjohnson72

+0

@ acjohnson72剛剛根據您的評論編輯希望它有幫助。 – terrybozzio

0
<form id="form1" runat="server"> 
<div> 
<table> 
<tr> <td> <asp:TextBox ID="txxt" runat="server" /> </td> </tr> 
<tr> <td> <asp:Button ID="btn" Text="test" runat="server" style="width: 36px" /> </td> </tr> 
<tr> <td> <asp:HiddenField ID="hdntest" runat="server" /> </td> </tr> 
</table> 
</div> 
</form> 

Protected Sub btn_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btn.Click 

    Dim s As String = "" 
    s = txxt.Text 
    s = s + "," 
    hdntest.Value = hdntest.Value + s 
    txxt.Text = hdntest.Value 

End Sub 
相關問題