我使用了gridview和linqdatasourse,在点击搜索按钮后,gridview将由linq存储过程填充。
我是这样做的,但我有错误“”'System.Web.UI.WebControls.LinqDataSourceSelectEventArgs.WhereParameters'不能像方法那样使用“
var subjectFilter = e.WhereParameters("Subject");
的GridView:
<asp:GridView ID="GridViewDocuments_Search"
runat="server"
AutoGenerateColumns=False
Visible="False"
onrowcommand="GridViewDocuments_Search_RowCommand"
DataKeyNames="DocID" PageSize="100">
<Columns>
<asp:TemplateField HeaderText = "Details">
<ItemTemplate>
<asp:Button ID ="btn_Show"
Text="Details"
runat= "server"
CommandName= "Details"
CommandArgument=
'<%#Container.DataItemIndex%>' />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="DocumentNo"
HeaderText="DocumentNo"
SortExpression="DocumentNo" />
<asp:BoundField DataField="title"
HeaderText="Title"
SortExpression="title" />
<asp:BoundField DataField="Docid"
HeaderText="Docid"
Visible="false" />
<asp:CommandField ShowEditButton="True" />
<asp:CommandField ShowDeleteButton="True" />
</Columns>
</asp:GridView>
<asp:LinqDataSource ID="LinqDataSource2"
runat="server"
ContextTypeName="EDMSDataContext"
OnSelecting="LinqDataSource2_Selecting">
<WhereParameters>
<asp:ControlParameter Name="Subject"
ControlID="txtSearchKeywords"
PropertyName="Text"
Type="String" />
</WhereParameters>
</asp:LinqDataSource>
代码:
protected void btnSearch_Click(object sender, EventArgs e)
{
_DataContext = new EDMSDataContext();
this.LinqDataSource2.WhereParameters["Subject"].DefaultValue =
this.txtSearchKeywords.Text;
this.GridViewDocuments_Search.DataBind();
}
public void LinqDataSource2_Selecting(object sender,
LinqDataSourceSelectEventArgs e)
{
_DataContext = new EDMSDataContext();
var subjectFilter = e.WhereParameters("Subject");
var query = _DataContext.spQuickSearchDoc(txtSearchKeywords.Text);
e.Result = query;
}
存储过程:
ALTER PROCEDURE [dbo].[spQuickSearchDoc]
@Searchtext varchar(50)=null
AS
select DocId,DocumentNo,Title,Unit
from tblDocuments
where DocumentNo like '%'+@SearchText + '%'
or Title like '%'+@SearchText + '%'
or Unit like '%'+@SearchText + '%'
答案 0 :(得分:0)
这是因为属性WhereParameters
不能像方法那样使用,就像异常所说的那样。
查询属性如:
e.WhereParameters["Subject"]
如果您查看LinqDataSourceSelectEventArgs
课程,您会将此属性视为:
public IDictionary<string, Object> WhereParameters { get; }
参考文献:
答案 1 :(得分:0)
在方法LinqDataSource2_Selecting中你必须写下这样的“[”括号:
var subjectFilter = e.WhereParameters["Subject"];