【问题标题】:Using Dropdown List for options for Search function in ASP.NET在 ASP.NET 中使用下拉列表作为搜索功能的选项
【发布时间】:2016-07-07 03:11:27
【问题描述】:

我确实开发了一个搜索功能,用户可以在文本框中键入他们想要搜索的项目,然后点击一个按钮进行搜索。 搜索功能已经在工作,但仅适用于一个选项(ContractNo),现在我想添加一个下拉列表以添加更多选项供用户搜索(添加:EmpID、TrainingCode 等)

这是 aspx 的代码:(是的,我只包含了我认为必要的代码)

 <div id="contentarea">
            <p> Search Employee ID, Training Code, Contract Number<br/>
                <asp:DropDownList ID="DropDownList1" runat="server">
                    <asp:ListItem>Contract Number</asp:ListItem>
                    <asp:ListItem>Training Code</asp:ListItem>
                    <asp:ListItem>Employee ID</asp:ListItem>
                </asp:DropDownList>
                <asp:TextBox ID="searchText" runat="server" Height="16px" Width="146px"></asp:TextBox>
                <asp:Button ID="ButtonSearch" runat="server" Text="Search" OnClick="ButtonSearch_Click" />
                <asp:Button ID="ButtonClear" runat="server" Text="Clear" OnClick="ButtonClear_Click" />
            </p>
            <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" CellPadding="4" DataKeyNames="TrainingCode" DataSourceID="SqlDataSource1" EmptyDataText="There are no data records to display." ForeColor="#333333" GridLines="None">
                <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
                <Columns>
                   </a>
                        </Itemtemplate>
                    </asp:TemplateField>--%>
                    <asp:TemplateField HeaderText="ContractNo" SortExpression="ContractNo">
                        <ItemTemplate>
                            <asp:Label ID="LabelContractNo" Text='<% #HighlightText(Eval("ContractNo").ToString()) %>' runat="server"></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="TrainingCode" SortExpression="TrainingCode">
                        <ItemTemplate>
                            <asp:Label ID="LabelTrainingCode" runat="server" Text='<%# Eval("TrainingCode") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="EmpID" SortExpression="EmpID">
                        <ItemTemplate>
                            <asp:Label ID="LabelEmpID" runat="server" Text='<%# Eval("EmpID") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="ContractDate" SortExpression="ContractDate">
                        <ItemTemplate>
                            <asp:Label ID="LabelContractDate" runat="server" Text='<%# Eval("ContractDate") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="ContractDuration" SortExpression="ContractDuration">
                        <ItemTemplate>
                            <asp:Label ID="LabelContractDuration" runat="server" Text='<%# Eval("ContractDuration") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="ServiceStart" SortExpression="ServiceStart">
                        <ItemTemplate>
                            <asp:Label ID="LabelServiceStart" runat="server" Text='<%# Eval("ServiceStart") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="ContractValue" SortExpression="ContractValue">
                        <ItemTemplate>
                            <asp:Label ID="LabelContractValue" runat="server" Text='<%# Eval("ContractValue") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="Served" SortExpression="Served">
                        <ItemTemplate>
                            <asp:Label ID="LabelServed" runat="server" Text='<%# Bind("Served") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>

            </asp:GridView>
            <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:dbx %>" DeleteCommand="DELETE FROM [SCHOLARSHIPCONTRACT] WHERE [TrainingCode] = @TrainingCode" InsertCommand="INSERT INTO [SCHOLARSHIPCONTRACT] ([ContractNo], [TrainingCode], [EmpID], [ContractDate], [ContractDuration], [ServiceStart], [ContractValue], [Served]) VALUES (@ContractNo, @TrainingCode, @EmpID, @ContractDate, @ContractDuration, @ServiceStart, @ContractValue, @Served)" SelectCommand="SELECT * FROM [SCHOLARSHIPCONTRACT]" UpdateCommand="UPDATE [SCHOLARSHIPCONTRACT] SET [ContractNo] = @ContractNo, [EmpID] = @EmpID, [ContractDate] = @ContractDate, [ContractDuration] = @ContractDuration, [ServiceStart] = @ServiceStart, [ContractValue] = @ContractValue, [Served] = @Served WHERE [TrainingCode] = @TrainingCode" FilterExpression="ContractNo '%{0}%'">

                <FilterParameters>
                    <asp:ControlParameter Name="ContractNo" ControlID="searchText" PropertyName="Text"/>
                </FilterParameters> 
</asp:SqlDataSource>

以及完整的 C# 后端代码:

private string SearchString = "";

protected void Page_Load(object sender, EventArgs e)
{
}

public string HighlightText(string InputText)
{
    string Search_str = searchText.Text;
    Regex RegExp = new Regex(Search_str.Replace(" ", "|").Trim(), RegexOptions.IgnoreCase);
    return RegExp.Replace(InputText, new MatchEvaluator(ReplaceKeywords));
}

public string ReplaceKeywords(Match m) //this is just to highlight the item searched
{
    return ("<span class=highlight>" + m.Value + "</span>");
}


protected void ButtonSearch_Click(object sender, EventArgs e)
{
    SearchString = searchText.Text;
}

protected void ButtonClear_Click(object sender, EventArgs e)
{
    searchText.Text = "";
    SearchString = "";
    GridView1.DataBind();

}

现在我想添加一个 if 语句可能吗?在过滤器参数上?喜欢

<% if (DropDownList1.text == "EmpID"){}

但我不确定.. 你能建议其他方法吗?如果您可能需要该程序中的其他代码,请告诉我。提前谢谢你

【问题讨论】:

  • 你的问题不清楚,能不能把存在的问题说清楚,你想达到什么目的?并且把gridview的代码从头到尾放,搜索的query在哪里?
  • @amal50 该问题已按要求进行了编辑,并添加了完整的 aspx 代码。我只想帮助构建下拉列表的代码。在其中的下拉列表选项中,例如:他们选择了 EmpID,那么用户将键入一个 EmpID 示例:20134,然后单击搜索按钮,然后结果将显示在 gridview 中。我想把代码放在哪里,在 aspx 或 C# 上。有什么建议么?谢谢

标签: c# asp.net gridview webforms


【解决方案1】:

尝试使用通用选项。使用 DropDown 列出所有类型(EmpID、TrainingCode)。在类型选择的基础上,使用 Switch 按 TextBox 中输入的文本进行过滤。

SearchString = searchText.Text; 开关(类型) { 案例 EmpID: 操作(); 休息; 案例培训代码: 操作(); 休息; }

【讨论】:

  • 感谢您的建议,我会考虑的。
【解决方案2】:

好的,这里是解决方案,它在我的电脑上工作正常,我希望这是你想要实现的。我在代码中放了一些 cmets,阅读它们

在aspx页面中,放上这段代码

<div id="contentarea">
        <p> Search Employee ID, Training Code, Contract Number<br/>
            <asp:DropDownList ID="DropDownList1" runat="server">
                <asp:ListItem Value="ContractNo">Contract Number</asp:ListItem>
                <asp:ListItem Value="TrainingCode">Training Code</asp:ListItem>
                <asp:ListItem Value="EmpID">Employee ID</asp:ListItem>
            </asp:DropDownList>
            <asp:TextBox ID="searchText" runat="server" Height="16px" Width="146px"></asp:TextBox>
            <asp:Button ID="ButtonSearch" runat="server" Text="Search" OnClick="ButtonSearch_Click" />
            <asp:Button ID="ButtonClear" runat="server" Text="Clear" OnClick="ButtonClear_Click" />
        </p>            

<asp:GridView ID="GridView1" runat="server"></asp:GridView>
</div>

这是 aspx.cs 中的 C# 代码

    private string SearchString = "";

    protected void Page_Load(object sender, EventArgs e)
    {
    }

    public string HighlightText(string InputText)
    {
        string Search_str = searchText.Text;
        Regex RegExp = new Regex(Search_str.Replace(" ", "|").Trim(), RegexOptions.IgnoreCase);
        return RegExp.Replace(InputText, new MatchEvaluator(ReplaceKeywords));
    }

    public string ReplaceKeywords(Match m) //this is just to highlight the item searched
    {
        return ("<span class=highlight>" + m.Value + "</span>");
    }

    private DataTable GetData(string query)
    {
        // Read connection string from web.config file , Important, change the 
        //ConnectionStrings name here (testConnectionString)
        // and replace it with your connection name , you can find it in web.config file
        // in <connectionStrings> tag , you find it after this tag <add name="

        string CS = ConfigurationManager.ConnectionStrings["testConnectionString"].ConnectionString;
        using (SqlConnection con = new SqlConnection(CS))
        {
            SqlDataAdapter sda = new SqlDataAdapter(query, con);

            using (DataTable dt = new DataTable())
            {
                con.Open();
                sda.Fill(dt);
                return dt;
            }
        }
    }

    protected void ButtonSearch_Click(object sender, EventArgs e)
    {
            SearchString = searchText.Text;
            string columnName = DropDownList1.SelectedValue;
            string searchSQL = "SELECT * FROM [SCHOLARSHIPCONTRACT] WHERE " + columnName + "= '" + SearchString + "'";


        //bind the SCHOLARSHIPCONTRACT table data into GridView1

        DataTable dt = this.GetData(searchSQL);
        GridView1.DataSource = dt;
        GridView1.DataBind();
    }

    protected void ButtonClear_Click(object sender, EventArgs e)
    {
        searchText.Text = "";
        SearchString = "";
        GridView1.DataBind();

    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多