如何获得所选值的Id?

时间:2015-05-11 08:06:05

标签: c# winforms telerik

我的DropDownList包含以下值:

ddl.SelectedValue = { Id = 234, Name = "ABC Name" }

如何获取Id的值?

我使用WinForms和RadDropDownList

3 个答案:

答案 0 :(得分:2)

试试这个:

public int GetId(object obj)
{
    var anon = new { Id = 0, Name = string.Empty };
    var obj2 = MakeSameType(obj, anon);
    return obj2.Id;
}

public static T MakeSameType<T>(object obj, T anonymous)
{
    return (T)obj;
}

使用它像:

int id = GetId(ddl.SelectedValue);

如果它有效,这要归功于等效的匿名类型如何&#34;浓缩&#34; C#编译器在单一类型中。

请注意,此解决方案与您一样脆弱

如果您添加/删除/重命名匿名类型的属性,GetId将会中断(您必须保持var anon = new {...} 完全对齐) 。如果将创建匿名类型集合的方法移动到另一个程序集,它也会中断(因为只有同一程序集中的匿名类型是&#34;统一&#34;由编译器完成)。

一般来说,你不应该拥有匿名类型&#34; escape&#34;一个方法。匿名类型应保留在定义它的方法中。直接将其指定为控件的DataSource会产生问题。

如果您感到懒惰并且不想为键值创建类型,请使用Tuple

var tuple = Tuple.Create(something, somethingelse, somethingstillelse);
var value1 = tuple.Item1;
var value2 = tuple.Item2;
var value3 = tuple.Item3;

等等。

答案 1 :(得分:1)

由于您使用的是匿名类型,因此它并不复杂。但是,您可以将SelectedValue转换为动态,并从那里抽取“Id”:

dynamic selectedValue = ddl.SelectedValue;
int id = selectedValue.Id;

但我会建议为这种情况声明自己的类或结构。

答案 2 :(得分:0)

我更改了LINQ查询

来自:

var query = (from q in tableq where ...
             select new {Id = q.Id, Name = q.Name});

为:

var query = (from q in tableq where ...
             select q);

...然后将其更改为:

table1.Id = (ddl.SelectedValue as tableq).Id == null ? table1.Id : (ddl.SelectedValue as tableq).Id;