C# LinqDataSource:筛选并绑定到gridview
这个问题并没有按照我想要的方式解决,但我还是要感谢:ŁukaszW.pl,感谢他的时间和努力 我正在使用gridview控件和一个linqdatasource,它工作正常,我添加了按Subject搜索的功能,并添加了Where参数,然后绑定了我的gridview。请参见下面的代码,但不知何故,它不返回任何行,并且根据我正在搜索的内容,我看到了行数C# LinqDataSource:筛选并绑定到gridview,c#,asp.net,linqdatasource,C#,Asp.net,Linqdatasource,这个问题并没有按照我想要的方式解决,但我还是要感谢:ŁukaszW.pl,感谢他的时间和努力 我正在使用gridview控件和一个linqdatasource,它工作正常,我添加了按Subject搜索的功能,并添加了Where参数,然后绑定了我的gridview。请参见下面的代码,但不知何故,它不返回任何行,并且根据我正在搜索的内容,我看到了行数 protected void btnSearch_Click(object sender, EventArgs e) { this.
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;
}
关于这个问题,我看不到GetInquiries方法和LinqDataSource之间有任何联系。这是第一个,第二个是,即使有连接,它也不会工作,若你们返回的是列表,而不是iQuery对象 更好地理解与LinqDataSource read的绑定 我还想向您展示,您的GetInquiries方法可以简化为以下形式:
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()
}
--编辑--
替代解决方案的示例:
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();
}
-----编辑-------
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>
关于假设您在页面中声明了如下内容:
<asp:LinqDataSource ID="LinqDataSource1"
runat="server"
ContextTypeName="MyDataContext"
OnSelecting="LinqDataSource1_Selecting">
<WhereParameters>
<asp:ControlParameter Name="Subject"
ControlID="txtSubject"
PropertyName="Text"
Type="String" />
</WhereParameters>
</asp:LinqDataSource>
或者,您可以将“Subject”作为输入参数添加到存储过程和数据库中的筛选中。在这种情况下,事件处理程序如下所示:
public void LinqDataSource1_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
var db = new MyDataContext())
var subjectFilter = e.WhereParameters("Subject");
var reporters = from spName in db.spReporter()
where spName.Subject.Contains(subjectFilter)
select new Reporter(spName.Id, spName.InqDate, spName.Subject);
e.Result = reporters;
}
public void LinqDataSource1_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
var db = new MyDataContext())
var subjectFilter = e.WhereParameters("Subject");
var reporters = from spName in db.spReporter(subjectFilter)
select new Reporter(spName.Id, spName.InqDate, spName.Subject);
e.Result = reporters;
}
相关资源:
谢谢你的建议。。。你是什么意思,能给我看几行吗?或者我在想我应该在GetInquiries中添加where子句,还是因为我在linqdatasource中添加where子句,它会自动处理?现在我认为,没有必要使用linqdatasource。。。只需使用GetInquiries方法获取报告者列表,然后将其作为普通数据源分配给gridView。上面的例子。对不起,我已经更新了LinqDataSource\u选择了问题哈哈。。现在它更有意义了。。尝试然后返回GetInquires,它返回纯IQuerable而不使用ToList方法,或者如果它不起作用,请尝试我的替代解决方案:我曾想过使用您在发布此问题之前提供的替代解决方案,但后来我认为这会太多,因为我需要按日期、主题、状态等7项进行筛选。。。。。
public void LinqDataSource1_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
var db = new MyDataContext())
var subjectFilter = e.WhereParameters("Subject");
var reporters = from spName in db.spReporter(subjectFilter)
select new Reporter(spName.Id, spName.InqDate, spName.Subject);
e.Result = reporters;
}