Gridview过滤在返回空时不起作用

时间:2013-07-23 13:38:03

标签: c# jquery asp.net gridview filtering

我设法为过滤gridView做了一个糟糕的借口,当我输入一个不返回任何内容的值时,它几乎可以工作。

例如,假设我有值11,12,23和24.如果我在文本框中输入'1',我只会看到'11'和'12'(即使结果是打开的,这也有效)不同的页面)。当我删除'1'时,我将再次看到所有值。优良!

但是如果我输入'3'它会返回一个空表(到目前为止很好),当我删除3时......仍然是空的!有谁知道这是为什么?

这是我的(重要)代码:

ASP

    <asp:HiddenField ID="hfText" runat="server" ClientIDMode="Static" />
    <input type="text" id="input" style="width: 66px;"/>
    <asp:GridView ID="myGv" runat="server" 
        ShowFooter="True" 
        AutoGenerateColumns="False" AllowPaging="true" AllowSorting="True"
        DataKeyNames="DataKeyId" DataSourceID="ObjectDataSource1" >
        <Columns>
            <asp:BoundField DataField="DataKeyId" HeaderText="DataKey" Visible="false" InsertVisible="False" ReadOnly="True" SortExpression="DataKeyId" />
            <asp:BoundField DataField="header1" HeaderText="Header1" SortExpression="header1" ReadOnly="True" />
            <asp:BoundField DataField="header2" HeaderText="Header2" SortExpression="header2" ReadOnly="True" />
        </Columns>
        <EmptyDataTemplate>
             No data found!
        </EmptyDataTemplate>
    </asp:GridView>
    <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="mySelectMethod" TypeName="WhereItsAt" >
        <SelectParameters>
            <asp:Parameter Name="header1" Type="String" Defaultvalue="" />
        </SelectParameters>
    </asp:ObjectDataSource>

的jQuery

 $(document).ready(function () {

     /* This piece of code just makes sure that the text remains after postback */
     $('#input').val($('#hfText').val());
     $('#input').focus();
     var textval = $('#input').val();
     $('#input').val("");
     $('#input').val(textval);
     /*******************/

     $('#input').keyup(function (event) {
         $('#hfText').val($('#input').val()).trigger('change');      
              __doPostBack('thisUrl.aspx', $('#input').val());
         });
     });
 });

C#(代码落后)

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        myGv.DataBind();
    }
    else
    {
        if (!Request["__EVENTARGUMENT"].Contains("Page$"))
        {
             reBind(Request["__EVENTARGUMENT"]);
        }
    }
}

protected void reBind(String sParam)
{
    ObjectDataSource1.SelectParameters.Remove(ObjectDataSource1.SelectParameters["header1"]);
    ObjectDataSource1.SelectParameters.Add("header1", sParam);
    myGv.DataBind();
}

(希望这不是TL; DR)

修改 输入一个不返回任何值然后输入一个应该返回的值的值后,我得到javascript错误“ReferenceError:__ doPostBack未定义”!

1 个答案:

答案 0 :(得分:0)

发现了一种超级解决方案!

我所要做的就是在我的页面加载中添加ClientScript.GetPostBackEventReference(this, string.Empty);,如下所示:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        myGv.DataBind();
    }
    else
    {
        ClientScript.GetPostBackEventReference(this, string.Empty);
        if (!Request["__EVENTARGUMENT"].Contains("Page$"))
        {
             reBind(Request["__EVENTARGUMENT"]);
        }
    }
}