'System.Web.UI.WebControls.LinqDataSourceSelectEventArgs.WhereParameters'不能像方法一样使用

时间:2012-12-18 08:20:07

标签: asp.net linq

我使用了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 + '%'

2 个答案:

答案 0 :(得分:0)

这是因为属性WhereParameters不能像方法那样使用,就像异常所说的那样。 查询属性如:

e.WhereParameters["Subject"]

如果您查看LinqDataSourceSelectEventArgs课程,您会将此属性视为:

public IDictionary<string, Object> WhereParameters { get; }

参考文献:

LinqDataSourceSelectEventArgs

LinqDataSourceSelectEventArgs.WhereParameters Property

答案 1 :(得分:0)

在方法LinqDataSource2_Selecting中你必须写下这样的“[”括号:

var subjectFilter = e.WhereParameters["Subject"];