使用LinqDataSource:过滤和绑定的GridView [英] LinqDataSource: Filtering and binding to gridview

查看:105
本文介绍了使用LinqDataSource:过滤和绑定的GridView的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

的问题不解决我想要的方式,但我继续给予信贷:ŁukaszW.pl他的时间和精力

我使用GridView控件和一个使用LinqDataSource和它的所有工作正常,我已经添加searchingBySubject的functionlity,我加入WhereParameters,比结合我的GridView控件(参见下面的code),但不知何故,它没有返回任何行,我知道我有一个基于我所寻找的行数。

 保护无效btnSearch_Click(对象发件人,EventArgs的发送)
 {
   this.LinqDataSource1.WhereParameters [主题] =默认值this.txtSubject.Text。
   this.GridView1.DataBind();
 }< ASP:GridView控件ID =GridView1=服务器的AutoGenerateColumns =FALSE
         的DataSourceID =LinqDataSource1
        EmptyDataText =有没有数据记录显示。>
        <柱体和GT;
            < ASP:BoundField的数据字段=用户名的HeaderText =用户名只读=真
                SORTEX pression =用户名/>
            < ASP:BoundField的数据字段=用户名的HeaderText =用户名
                SORTEX pression =用户名/>
            < ASP:BoundField的数据字段=名字的HeaderText =姓
                SORTEX pression =名字/>
            < ASP:BoundField的数据字段=姓氏的HeaderText =姓氏
                SORTEX pression =姓氏/>
            < ASP:BoundField的数据字段=电子邮件的HeaderText =电子邮件SORTEX pression =电子邮件/>
        < /专栏>
    < / ASP:GridView的>     < ASP:使用LinqDataSource ID =LinqDataSource1=服务器
        ContextTypeName =MyDataContextDataContext
        onselecting =LinqDataSource_Selecting>
            < WhereParameters>
               < ASP:参数名称=主题/>
            < / WhereParameters>
        < / ASP:使用LinqDataSource>公开名单<&记者GT; GetInquiries()
        {
            使用(MyDataContextDataContext DC = conn.GetContext())
            {
                VAR LOADALL =(从spName在dc.s preporter()
                               选择spName);                清单<&记者GT; reporterList =新的List<&记者GT;();                的foreach(在LOADALL VAR项)
                {
                    reporterList.Add(新记者(item.Id,item.InqDate,item.Subject));
                }                返回reporterList;
            }

错误:

 查询结果不能枚举超过一次


解决方案

关于这个问题,我没有看到你的GetInquiries方法和使用LinqDataSource之间的任何连接。那是第一,第二是即使会有连接,如果你正在返回列表将无法正常工作,而不是IQueriable对象...

为了更好地与uderstand结合使用LinqDataSource读<一个href=\"http://weblogs.asp.net/scottgu/archive/2007/07/16/linq-to-sql-part-5-binding-ui-using-the-asp-linqdatasource-control.aspx\"相对=nofollow>此斯科特谷的文章

此外,我想告诉你,你的GetInquiries方法可以简化为以下形式:

 公开名单&LT;&记者GT; GetInquiries()
    {
        使用(MyDataContextDataContext DC = conn.GetContext())
        {
            在dc.s preporter返回(从spName()
                    选择新记者(spName.Id,spName.InqDate,spName.Subject))。了ToList()        }

---- ---- EDITED

的替代解决方案示例:

 公开名单&LT;&记者GT; GetInquiries(字符串主题)
    {
        使用(MyDataContextDataContext DC = conn.GetContext())
        {
            在dc.s preporter返回(从spName()
                    选择新记者(spName.Id,spName.InqDate,spName.Subject
                    其中,spName.Subject ==主题))了ToList()        }
    }    保护无效btnSearch_Click(对象发件人,EventArgs的发送)
    {
       GridView1.DataSource = GetInquiries(txtSubject.Text);
       GridView1.DataBind();
    }

----------编辑-------------

 保护无效btnSearch_Click(对象发件人,EventArgs的发送)
{
   this.LinqDataSource1.WhereParameters [主题] =默认值this.txtSubject.Text。
   this.GridView1.DataBind();
}公共无效LinqDataSource1_Selecting(对象发件人,LinqDataSourceSelectEventArgs E)
{
    ReporterRepository reporterRepo =新ReporterRepository();
    e.Result = reporterRepo.GetInquiries();
}公众的IQueryable&LT;&记者GT; GetInquiries()
{
    从spName在dc.s preporter返回()
           选择新记者(spName.Id,spName.InqDate,spName.Subject);
}&LT; ASP:GridView控件ID =GridView1=服务器的AutoGenerateColumns =FALSE的DataSourceID =LinqDataSource1EmptyDataText =没有数据记录显示&GT;
        &LT;柱体和GT;
            &LT; ASP:BoundField的数据字段=用户名的HeaderText =用户名只读=真
                SORTEX pression =用户名/&GT;
            &LT; ASP:BoundField的数据字段=用户名的HeaderText =用户名
                SORTEX pression =用户名/&GT;
            &LT; ASP:BoundField的数据字段=名字的HeaderText =姓
                SORTEX pression =名字/&GT;
            &LT; ASP:BoundField的数据字段=姓氏的HeaderText =姓氏
                SORTEX pression =姓氏/&GT;
            &LT; ASP:BoundField的数据字段=电子邮件的HeaderText =电子邮件SORTEX pression =电子邮件/&GT;
        &LT; /专栏&GT;
&LT; / ASP:GridView的&GT;&LT; ASP:使用LinqDataSource ID =LinqDataSource1=服务器ContextTypeName =MyDataContextDataContextonselecting =LinqDataSource_Selecting&GT;
        &LT; WhereParameters&GT;
           &LT; ASP:参数名称=主题/&GT;
        &LT; / WhereParameters&GT;
&LT; / ASP:使用LinqDataSource&GT;

问候

the problem is not solved the way i wanted but i go ahead give the credit to : ŁukaszW.pl for his time and effort.

i am using gridview control and a linqdatasource and its all working fine and i have added the functionlity of searchingBySubject and i added WhereParameters and than binding my gridview (see the code below) but somehow its not returning any rows and i see i have number of rows based on what i am searching.

 protected void btnSearch_Click(object sender, EventArgs e)
 {    
   this.LinqDataSource1.WhereParameters["Subject"].DefaultValue = this.txtSubject.Text;
   this.GridView1.DataBind();
 }

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"  
         DataSourceID="LinqDataSource1"  
        EmptyDataText="There are no data records to display."> 
        <Columns> 
            <asp:BoundField DataField="UserID" HeaderText="UserID" ReadOnly="True"  
                SortExpression="UserID" /> 
            <asp:BoundField DataField="Username" HeaderText="Username"  
                SortExpression="Username" /> 
            <asp:BoundField DataField="FirstName" HeaderText="FirstName"  
                SortExpression="FirstName" /> 
            <asp:BoundField DataField="LastName" HeaderText="LastName"  
                SortExpression="LastName" /> 
            <asp:BoundField DataField="Email" HeaderText="Email" SortExpression="Email" /> 
        </Columns> 
    </asp:GridView> 

     <asp:LinqDataSource ID="LinqDataSource1" runat="server"  
        ContextTypeName="MyDataContextDataContext" 
        onselecting="LinqDataSource_Selecting" > 
            <WhereParameters> 
               <asp:Parameter Name="Subject" />
            </WhereParameters> 
        </asp:LinqDataSource>



public List<Reporter> GetInquiries()
        {
            using (MyDataContextDataContext dc = conn.GetContext())
            {
                var loadAll = (from spName in dc.spReporter()
                               select spName);

                List<Reporter> reporterList = new List<Reporter>();

                foreach (var item in loadAll)
                {
                    reporterList.Add(new Reporter(item.Id, item.InqDate, item.Subject));
                }                

                return reporterList;
            }      

ERROR:

 The query results cannot be enumerated more than once

解决方案

About the problem, I don't see any connection between your GetInquiries method and LinqDataSource. Thats first, second is that even if there will be connection it will not work if you are returning list, and not IQueriable object...

To better uderstand binding with LinqDataSource read this Scott Gu's article

Also I want to show you that your GetInquiries method could be simplified to this form:

    public List<Reporter> GetInquiries()
    {
        using (MyDataContextDataContext dc = conn.GetContext())
        {
            return (from spName in dc.spReporter()
                    select new Reporter(spName.Id, spName.InqDate, spName.Subject)).ToList()

        }      

---- EDITED ----

Example of alternative solution:

    public List<Reporter> GetInquiries(string subject)
    {
        using (MyDataContextDataContext dc = conn.GetContext())
        {
            return (from spName in dc.spReporter()
                    select new Reporter(spName.Id, spName.InqDate, spName.Subject
                    where spName.Subject == subject)).ToList()

        }  
    }

    protected void btnSearch_Click(object sender, EventArgs e)
    {    
       GridView1.DataSource = GetInquiries(txtSubject.Text);
       GridView1.DataBind();
    }

---------- EDIT -------------

protected void btnSearch_Click(object sender, EventArgs e)
{    
   this.LinqDataSource1.WhereParameters["Subject"].DefaultValue = this.txtSubject.Text;
   this.GridView1.DataBind();
}

public void LinqDataSource1_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{ 
    ReporterRepository reporterRepo = new ReporterRepository();
    e.Result = reporterRepo.GetInquiries();    
}

public IQueryable<Reporter> GetInquiries()
{
    return from spName in dc.spReporter()
           select new Reporter(spName.Id, spName.InqDate, spName.Subject);
}     

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="LinqDataSource1" EmptyDataText="There are no data records to display."> 
        <Columns> 
            <asp:BoundField DataField="UserID" HeaderText="UserID" ReadOnly="True"  
                SortExpression="UserID" /> 
            <asp:BoundField DataField="Username" HeaderText="Username"  
                SortExpression="Username" /> 
            <asp:BoundField DataField="FirstName" HeaderText="FirstName"  
                SortExpression="FirstName" /> 
            <asp:BoundField DataField="LastName" HeaderText="LastName"  
                SortExpression="LastName" /> 
            <asp:BoundField DataField="Email" HeaderText="Email" SortExpression="Email" /> 
        </Columns> 
</asp:GridView> 

<asp:LinqDataSource ID="LinqDataSource1" runat="server" ContextTypeName="MyDataContextDataContext" onselecting="LinqDataSource_Selecting"> 
        <WhereParameters> 
           <asp:Parameter Name="Subject" />
        </WhereParameters> 
</asp:LinqDataSource>

Regards

这篇关于使用LinqDataSource:过滤和绑定的GridView的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆