ASP.net文本框实时搜索-GridView结果过滤器

时间:2018-06-19 13:33:44

标签: javascript c# jquery asp.net livesearch

我的情况是;我正在尝试为我的ASP.net项目提供实时搜索功能。在表单中,我有一个描述文本框,用户将在其中输入搜索内容,并且当用户键入任何内容时,下面的GridView会相应地过滤结果。我已经在台式机应用程序上进行了尝试,虽然没有什么麻烦,但是最近我浸入了Web应用程序。任何帮助,将不胜感激。我敢肯定有一个简单的方法可以做到这一点,但是我似乎很难找到“那样的”方法。

Below are what I tried already:

I have tried using onTextChanged property of the textbox but it only populates after the event request.

I have added a function using Ajax+ JQuery which calls the method but the gridview is not displaying the data.

enter code here

<script type="text/javascript">
    $(function () {
        GetCustomers();
    });
    $("[id*=TxtDescription]").live("keyup", function () {
        GetCustomers();
    });

    function SearchTerm() {
        return jQuery.trim($("[id*=TxtDescription]").val());
    };
    function GetCustomers() {
        $.ajax({
            type: "POST",
            url: "frmDrugMaster.aspx/GetCustomers",
            data: '{searchTerm: "' + SearchTerm() + '"}',
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: OnSuccess,
            failure: function (response) {
                alert(response.d);
            },
            error: function (response) {
                alert(response.d);
            }
        });
    }
    var row;

function OnSuccess(response) {
 var xmlDoc = $.parseXML(response.d);    
        var xml = $(xmlDoc);
        var customers = xml.find("Drugs");
        alert(customers.length);
        if (row == null) {

            row = $("[id*=gvCustomers] tr:last-child").clone(true);
        }

        $("[id*=gvCustomers] tr").not($("[id*=gvCustomers] tr:first-child")).remove();
        if (customers.length > 0) {
            alert(customers.length);
            $.each(customers, function () {
                var customer = $(this);
                $("td", row).eq(0).html($(this).find("DR_Code").text());
                $("td", row).eq(1).html($(this).find("DR_Description").text());
                $("td", row).eq(2).html($(this).find("DR_UnitDose").text());

                alert($("td", row).eq(0).html($(this).find("DR_Description").text()));
                $("[id*=gvCustomers]").append(row);
                $
                row = $("[id*=gvCustomers] tr:last-child").clone(true); 
});
    } else {
        var empty_row = row.clone(true);
        $("td:first-child", empty_row).attr("colspan", $("td", row).length);
        $("td:first-child", empty_row).attr("align", "center");
        $("td:first-child", empty_row).html("No records found for the search criteria.");
        $("td", empty_row).not($("td:first-child", empty_row)).remove();
        $("[id*=gvCustomers]").append(row);
    }
    };
</script> 

[WebMethod]
        public static string GetCustomers(string searchTerm)



        {
            SqlConnection cn = new SqlConnection(WebConfigurationManager.ConnectionStrings["dbconn"].ConnectionString);
            SqlCommand cmd = new SqlCommand("SELECT  a.DR_UNITDOSE, a.DR_CODE, a.DR_DESCRIPTION, a.DR_GENERIC1, a.DR_GENERIC2, a.DR_GENERIC3, a.DR_GENERIC4, a.DR_COSTPRICE, a.DR_SELLPRICE, a.DR_STATUS  FROM DRUGMASTER a, DRUGCATEGORY b  where a.DR_CATEGORY = b.DC_CODE and DR_DESCRIPTION='"+ searchTerm + "'  ", cn);
            cn.Open();
            cmd.ExecuteNonQuery();
            cn.Close();
           DataTable dt = new DataTable();
            dt.TableName = "Drugs";
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            da.Fill(dt);
            DataSet ds = new DataSet();
            ds.Tables.Add(dt);
            return ds.GetXml();
        } 

1 个答案:

答案 0 :(得分:0)

我找到了解决这个问题的方法,或者至少找到了一种解决方法。我使用了AJAX + JQuery。我刚刚为将要应用文本更改的特定页面创建了一个Web服务。使用的代码如下。希望这可以帮助某人:

/*form*/
create a webform with  a textbox and a gridview:

/*Add this script*/
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
script type="text/javascript">
        $(function () {
            $("[id*=txtCountry]").on("keyup", function () {
                $.ajax({
                    type: "POST",
                    url: "WebForm2.aspx/GetCustomers",
                    data: '{searchTerm: "' + $(this).val() + '"}',
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: function (response) {
                        var row;
                        var xmlDoc = $.parseXML(response.d);
                        var xml = $(xmlDoc);
                        var customers = xml.find("Customers");
                        if (row == null) {
                            row = $("[id*=gvCustomers] tr:last-child").clone(true);
                        }
                        $("[id*=gvCustomers] tr").not($("[id*=gvCustomers] tr:first-child")).remove();
                        if (customers.length > 0) { 
$.each(customers, function () {
                                $("td", row).eq(0).html($(this).find("PD_FSTNM").text());
                                $("td", row).eq(1).html($(this).find("PD_GENDER").text());
                                $("[id*=gvCustomers]").append(row);
                                row = $("[id*=gvCustomers] tr:last-child").clone(true);
                            });
                        } else {
                            var empty_row = row.clone(true);
                            $("td:first-child", empty_row).attr("colspan", $("td", row).length);
                            $("td:first-child", empty_row).attr("align", "center");
                            $("td:first-child", empty_row).html("No records found for the search criteria.");
                            $("td", empty_row).not($("td:first-child", empty_row)).remove();
                            $("[id*=gvCustomers]").append(empty_row);
                        }
                    }, 
failure: function (response) { alert(response.d); },

                });
            });
        });
    </script> 

/*C# Code*/
[System.Web.Services.WebMethod]
        public static string GetCustomers(string searchTerm = "")
        {
            string strConnString = ConfigurationManager.ConnectionStrings[""].ConnectionString;
            SqlConnection con = new SqlConnection(strConnString);
            string query = "SELECT * FROM patientdetails";
            if (!string.IsNullOrEmpty(searchTerm))
            {
                query += " WHERE PD_FSTNM LIKE '" + searchTerm + "%'";
            }
            SqlCommand cmd = new SqlCommand(query, con);
            cmd.CommandType = CommandType.Text;

            SqlDataAdapter sda = new SqlDataAdapter(cmd);
            DataSet ds = new DataSet();
            sda.Fill(ds, "Customers");
            return ds.GetXml();
        }