【问题标题】:How to get the Id of the selectedvalue?如何获取选定值的 ID?
【发布时间】:2015-05-11 08:06:05
【问题描述】:

我的 DropDownList 具有以下值:

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

如何获取 Id 的值?

我使用 WinForms 和 RadDropDownList

【问题讨论】:

  • ddl.SelectedValue.GetType() 是什么?
  • 具有两个属性的 LINQ.query。

标签: c# winforms telerik


【解决方案1】:

试试这个:

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;

等等。

【讨论】:

    【解决方案2】:

    当您使用匿名类型时,它变得有点复杂。但是,您可以将 SelectedValue 转换为动态,并从那里提取“Id”:

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

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

    【讨论】:

      【解决方案3】:

      我更改了 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;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-15
        • 2021-11-10
        • 1970-01-01
        • 1970-01-01
        • 2020-07-14
        • 1970-01-01
        • 1970-01-01
        • 2016-03-31
        相关资源
        最近更新 更多