0

I have used a gridview and linqdatasourse , the gridview will be fill by a linq-stored procedure after clicking a search button.

I did it like below but my grid view is empty.

It seems LinqDataSource2_Selecting does not work.

Please help what is the problem?

public void LinqDataSource2_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
_DataContext = new EDMSDataContext();

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



var query = _DataContext.spQuickSearchDoc(subjectFilter);


e.Result = query;
}

protected void btnSearch_Click(object sender, EventArgs e)
{
    _DataContext = new EDMSDataContext();
    this.LinqDataSource2.WhereParameters["Subject"].DefaultValue =    this.txtSearchKeywords.Text;

    GridViewDocuments.Visible = false;
    GridViewDocuments_Search.Visible = true;
    this.GridViewDocuments_Search.DataBind();

}

Stored procedure:

 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 + '%'

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>
4

1 回答 1

1

您需要将 DataSourceID 添加到 GridView,如下所示:

<asp:GridView ID="GridViewDocuments_Search" runat="server" 
   . .  DataSourceID="LinqDataSource2">

由于未设置,因此 GridView 被绑定为 NULL。

于 2012-12-18T15:28:49.067 回答