Как сделать автозаполнение в просмотре списка через texbox? - PullRequest
0 голосов
/ 20 марта 2012

Здесь я использую автозаполнение в текстовом поле, а значения взяты из базы данных. Это работает нормально. Мне нужно сделать это автозаполнение в списке, когда я вводю любое значение в текстовое поле. Вот мой код

  <asp:TextBox ID="txtContactsSearch" runat="server"></asp:TextBox>
    <cc1:AutoCompleteExtender ServiceMethod="ListView1_SelectedIndexChanged" 
        MinimumPrefixLength="2"
        CompletionInterval="100" EnableCaching="false" CompletionSetCount="10" 
        TargetControlID="txtContactsSearch"
        ID="AutoCompleteExtender1" runat="server" FirstRowSelected = "false">
    </cc1:AutoCompleteExtender>

и

<asp:ListView ID="ListView1" runat="server" DataSourceID="SqlDataSource1">
            <ItemTemplate>
                <tr id="Tr1" runat="server">
                    <td id="Td1" runat="server">
                        <asp:Label ID="NameLabel" runat="server" Text='<%#Eval("regon_name") %>' />
                    </td>
                      <td id="Td2" runat="server">
                        <asp:Label ID="Label3" runat="server" Text='<%#Eval("code") %>' />
                    </td>
                </tr>
            </ItemTemplate>
        </asp:ListView>
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:DB_CGTPO_DEVEConnectionString %>"
            SelectCommand="SELECT [regon_name], [code] FROM [region_test]"></asp:SqlDataSource>

и

 [System.Web.Script.Services.ScriptMethod()]
    [System.Web.Services.WebMethod]
    public static List<string> ListView1_SelectedIndexChanged(string prefixText, int count)
    {
        using (SqlConnection conn = new SqlConnection(""))
        {
            //conn.ConnectionString = ConfigurationManager
            //        .ConnectionStrings["constr"].ConnectionString;
            using (SqlCommand cmd = new SqlCommand())
            {
                cmd.CommandText = "select regon_name from region_test where " +
                "regon_name like @SearchText + '%'";
                cmd.Parameters.AddWithValue("@SearchText", prefixText);
                cmd.Connection = conn;
                conn.Open();
                List<string> customers = new List<string>();
                using (SqlDataReader sdr = cmd.ExecuteReader())
                {
                    while (sdr.Read())
                    {

                        customers.Add(sdr["regon_name"].ToString());
                    }
                }
                conn.Close();
                return customers;
            }
        }
    }

Есть предложения?

1 Ответ

0 голосов
/ 20 марта 2012

Почему вы просто не помещаете текстовое поле внутри списка ..?

<asp:ListView ID="ListView1" runat="server" DataSourceID="SqlDataSource1">
            <ItemTemplate>
                <tr id="Tr1" runat="server">
                    <td id="Td1" runat="server">
                        <asp:Label ID="NameLabel" runat="server" Text='<%#Eval("regon_name") %>' />
                    </td>
                      <td id="Td2" runat="server">
                        <asp:Label ID="Label3" runat="server" Text='<%#Eval("code") %>' />
                    </td>
                </tr>
<tr>
 <td id="Td3" runat="server" colspan="2">
 <asp:TextBox ID="txtContactsSearch" runat="server"></asp:TextBox>
    <cc1:AutoCompleteExtender ServiceMethod="ListView1_SelectedIndexChanged" 
        MinimumPrefixLength="2"
        CompletionInterval="100" EnableCaching="false" CompletionSetCount="10" 
        TargetControlID="txtContactsSearch"
        ID="AutoCompleteExtender1" runat="server" FirstRowSelected = "false">
    </cc1:AutoCompleteExtender>
 </td>
</tr>
            </ItemTemplate>
        </asp:ListView>
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:DB_CGTPO_DEVEConnectionString %>"
            SelectCommand="SELECT [regon_name], [code] FROM [region_test]"></asp:SqlDataSource>
...