C# 在Linq查询中使用DropDownList selecteditem
我有一个dropdownlist,它是gridview中的列列表。我需要能够根据第一个dropdownlist中的列选择填充另一个dropdownlist。我正在填充第一个dropdownlist,如下所示:C# 在Linq查询中使用DropDownList selecteditem,c#,asp.net,linq,drop-down-menu,C#,Asp.net,Linq,Drop Down Menu,我有一个dropdownlist,它是gridview中的列列表。我需要能够根据第一个dropdownlist中的列选择填充另一个dropdownlist。我正在填充第一个dropdownlist,如下所示: public void ddlColumnPopulate() { var gvColumns = GridView1.Columns; var viewName = ((IDataSource)EntityDataSource1).GetViewN
public void ddlColumnPopulate()
{
var gvColumns = GridView1.Columns;
var viewName = ((IDataSource)EntityDataSource1).GetViewNames().OfType<string>().First();
var view = (EntityDataSourceView)((IDataSource)EntityDataSource1).GetView(viewName);
var schema = view.GetViewSchema();
var dsColumns = schema.Columns;
var dvColumnsDict = gvColumns.OfType<BoundField>().ToDictionary(a => a.DataField);
foreach (DataColumn c in dsColumns)
{
//var li = new ListItem(string.Format("{0}: {1}", c.ColumnName, c.DataType), c.DataType.ToString());
var li = new ListItem(c.ColumnName, c.DataType.ToString());
ddlColumn.Items.Add(li);
}
}
我收到错误消息:数据绑定:“System.String”不包含名为“intBatchID”的属性 改变你的想法
var a=(来自dbContext.tbl\u批处理中的b
选择col)代码>
到
var a=(来自dbContext.tbl\u批处理中的b
选择col.tolist()代码>您需要解决以下几个问题:
您必须使用SelectedItem.ToString
而不是SelectedItem.Text
:
string col = ddlColumn.SelectedItem.Text;
您还需要修复linq
查询。您将需要使用System.Linq.Dynamic
将列名传递给linq查询。您还需要反射来获取列数据。以下内容应可行,但如有任何修改,我将不胜感激:
编辑:
您需要使用System.Linq.Dynamic
,而不是动态表达式API
string col = ddlColumn.SelectedItem.Text;
string selColName = "new(" + col + ")";
var q = dbContext.tbl_Batch.Select(selColName);
List<string> myList = new List<string>();
foreach (var colItem in q)
{
if (colItem != null)
{
Type type = colItem.GetType();
PropertyInfo pInfo = type.GetProperty(col);
var myValue = pInfo.GetValue(colItem, null);
myList.Add(myValue.ToString());
}
}
myList = myList.Select(x => x).Distinct().ToList();
ddlData.DataSource = myList;
ddlData.DataBind();
你可以下载我的测试项目。a和col的内容是什么?我不知道你的a的内容是什么。但看起来你是一个字符串,而不是一个列表。如果您有intBatchID,则不应出现问题我在linq上遇到错误-无法将lambda表达式转换为类型“string”,因为它不是委托类型。当它到达foreach时,我收到错误消息:“new”无法解析为有效的类型或函数。在简单标识符第1行第8列附近。item和colitem应该是同一个变量吗?它应该是colitem。。。在测试后,忘记到处更改变量名。SelectedValue应为SelectedItem。我已经修复了代码。我仍然收到错误消息:“new”无法解析为有效的类型或函数。靠近简单标识符,第1行,第8列。当我击中foreach时。我不知道这个错误是什么意思?
string col = ddlColumn.SelectedItem.Text;
string selColName = "new(" + col + ")";
var q = dbContext.tbl_Batch.Select(selColName);
List<string> myList = new List<string>();
foreach (var colItem in q)
{
if (colItem != null)
{
Type type = colItem.GetType();
PropertyInfo pInfo = type.GetProperty(col);
var myValue = pInfo.GetValue(colItem, null);
myList.Add(myValue.ToString());
}
}
myList = myList.Select(x => x).Distinct().ToList();
ddlData.DataSource = myList;
ddlData.DataBind();
using System.Linq.Dynamic;
using System.Reflection;