![](/img/trans.png)
[英]how to get selectedvalue from DataGridViewComboBoxColumn?
[英]How to get the Id of the selectedvalue?
我的DropDownList具有以下值:
ddl.SelectedValue = { Id = 234, Name = "ABC Name" }
如何获得ID的值?
我使用WinForms和RadDropDownList
试试这个:
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);
如果可行,这要感谢C#编译器将等效匿名类型“压缩”为单个类型。
请注意,此解决方案非常脆弱
如果添加/删除/重命名匿名类型的属性,则GetId
将中断(您必须使var anon = new {...}
完全对齐)。 如果将创建匿名类型集合的方法移至另一个程序集,该方法也将中断(因为只有同一程序集中的匿名类型被编译器“统一”)。
通常,您不应该具有“转义”方法的匿名类型。 匿名类型应保留在定义的方法中。 直接将其分配为控件的DataSource
遇到问题。
如果您感到懒惰并且不想为键值创建类型,请使用Tuple
:
var tuple = Tuple.Create(something, somethingelse, somethingstillelse);
var value1 = tuple.Item1;
var value2 = tuple.Item2;
var value3 = tuple.Item3;
等等。
当您使用匿名类型时,它变得有点复杂。 但是,您可以将SelectedValue强制转换为动态值,并从此处提取“ Id”:
dynamic selectedValue = ddl.SelectedValue;
int id = selectedValue.Id;
但是我建议在这种情况下声明自己的类或结构。
我已经更改了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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.