我有一个下拉列表,它是gridview中列的列表。我需要能够根据第一个下拉列表中列的选择来填充另一个下拉列表。我正在填充第一个下拉列表,如下所示:
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);
}
}
我正在尝试像这样填充第二个下拉列表,但它不起作用。我不确定你是否能做到这样的事情?
public void populatecolumn()
{
using (TestEntities dbContext = new TestEntities())
{
string col = ddlColumn.SelectedItem.ToString();
var a = (from b in dbContext.tbl_Batch
select col);
ddlData.DataSource = a;
ddlData.DataTextField = col;
ddlData.DataValueField = col;
DataBind();
ddlData.Items.Insert(0, new ListItem(String.Empty, String.Empty));
ddlData.SelectedIndex = 0;
}
}
我收到错误消息:DataBinding:'System.String'不包含名为'intBatchID'的属性。
答案 0 :(得分:0)
改变你的
var a = (from b in dbContext.tbl_Batch
select col);
要
var a = (from b in dbContext.tbl_Batch
select col).tolist();
答案 1 :(得分:0)
你需要解决几件事:
而不是SelectedItem.ToString()
,您必须使用SelectedItem.Text
:
string col = ddlColumn.SelectedItem.Text;
您还需要修复linq
查询。您将需要使用System.Linq.Dynamic
将列名称传递给linq查询。您还需要反射来获取列数据。以下应该有效,但我将不胜感激:
编辑:您需要使用System.Linq.Dynamic
,而不是Dynamic Expression 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();
您必须安装 Dynamic Expression API
System.Linq.Dynamic
(在Nuget
中可用)并添加以下内容:
using System.Linq.Dynamic;
using System.Reflection;
您可以下载我的测试项目here。