0

我有一个项目,我从 formview 字段中获取值作为字符串(40 多个字段)。我想减少代码中的行数,并希望将列表值添加到我从表单视图中收集的每个字符串值的一行代码中。

我的代码片段是:

...
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 
 }); 

- 但我已经搜索了许多尝试这样做的方法,但没有任何结果。我不确定我只是没有正确搜索它还是不可能?

4

6 回答 6

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 };
于 2013-10-25T15:56:29.360 回答
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())
                         });
于 2013-10-25T16:01:38.323 回答
1

尝试这个 :

myList.Add(e.NewValues["value1"].ToString());
于 2013-10-25T15:56:28.220 回答
1

你可以使用

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

或使用内联赋值:

List<string> mylist = new List<string>
{
   e.NewValues["value1"].ToString(),
   e.NewValues["value2"].ToString()
};
于 2013-10-25T15:57:52.577 回答
0

NewValues 是一本字典,所以这样可以在一个衬里中工作:

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

更新:

NewValues 返回的是一个orderedDictionary,因此在您的eventHandler 中放置以下代码:

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

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

或者如果 mylist 是一个类成员变量,那么只有 foreach 循环将填充列表。

于 2013-10-25T16:26:40.647 回答
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
于 2014-05-15T05:44:05.103 回答