首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >当数据源为Linq时访问ItemDataBound事件中的列

当数据源为Linq时访问ItemDataBound事件中的列
EN

Stack Overflow用户
提问于 2009-09-24 10:46:59
回答 3查看 40.1K关注 0票数 16

我正在用下面的代码设置数据源:

    protected void Page_Load(object sender, EventArgs e)
    {
        var vacancies = from v in db.Vacancies
                    join c in db.Customers on v.CustomerID equals c.CustomerID
                    join cp in db.CustomerPortals on c.CustomerID equals cp.CustomerID
                    where cp.PortalID == Master.Portal.ID
                    select new
                    {
                        Title = v.Title,
                        Internship = (v.ContractID == 6),
                        Hours = v.Hours,
                        City = v.Customer.City.Name,
                        Degree = v.Degree.Title,
                        Contract = v.Contract.Title,
                        CustomerID = v.CustomerID
                    };
        rVacancies.ItemDataBound += new RepeaterItemEventHandler(rVacancies_ItemDataBound);
        rVacancies.DataSource = vacancies;
        rVacancies.DataBind();
    }

现在,我想知道如何从ItemDataBound事件访问1个列(如CustomerID)。

    void rVacancies_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
         // This doesnt seem to work, row would be null even though e.Item.DataItem has a value.
         DataRow row = (DataRow)e.Item.DataItem;
    }

我已经知道e.Item.DataItem包含我的查询中的所有字段,并且e.Item.DataItem的类型是

f__AnonymousType8<string,bool,byte,string,string,string,long>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-09-24 10:53:33

您没有将DataRow绑定到控件(绑定的是匿名类型),因此不应该将DataItem强制转换为datarow。

尝试以如下方式获取行的数据:

var dataItem = e.Item.DataItem;
// For example get your CustomerID as you defined at your anonymous type :
string customerId = dataItem.CustomerID;
票数 -2
EN

Stack Overflow用户

发布于 2009-09-24 12:40:56

最终找到它,就像下面这样简单:

long customerID = long.Parse(DataBinder.Eval(e.Item.DataItem, "CustomerID").ToString());
票数 37
EN

Stack Overflow用户

发布于 2010-08-18 22:44:12

这种.Net 4.0的方法也确实很酷!

public void PersonDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        dynamic person = e.Item.DataItem as dynamic;

        string name = person.Name;
        int age = person.Age;
    }
}

归功于:http://www.kristofclaes.be/blog/2010/08/12/anonymous-types-and-the-itemdatabound-event/

由于页面现在显示错误404,下面是来自Wayback的页面:Anonymous types and the ItemDataBound event (Archived version)

票数 37
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1470907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档