【问题标题】:Dynamic Dropdown unable to sort alphabetically动态下拉菜单无法按字母顺序排序
【发布时间】:2018-06-07 12:20:49
【问题描述】:

我创建了 2 个下拉列表,第二个来自第一个。我希望第二个结果按字母顺序显示,但是,即使我在 SQL 中包含了 ORDER BY,该列表也不会生成排序列表。

  <div class="auto-style17">
            Please select the category of activity you are reviewing from the pick list :&nbsp; 
        <asp:SqlDataSource ID="iSAMS" runat="server" ConnectionString="<%$ ConnectionStrings:iSAMSConnectionString %>" 
            SelectCommand="SELECT [blnActive], [TblActivityManagerFolderID], [txtName] FROM [TblActivityManagerFolder] WHERE ([intActivity] = @intActivity)">
        <SelectParameters>
            <asp:Parameter DefaultValue="34" Name="intActivity" Type="Int32" />
        </SelectParameters>
    </asp:SqlDataSource>                     

    <asp:DropDownList ID="CategorySelect" runat="server" DataTextField="txtName" DataValueField="TblActivityManagerFolderID" 
        OnSelectedIndexChanged="ActivitySelect_SelectedIndexChanged" CssClass="newStyle1" AutoPostBack="True">
    </asp:DropDownList>
            <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="CategorySelect" 
                ErrorMessage="Please select your answer" style="text-align: left; font-weight: 700; color: #FF0000; font-size: medium;">!</asp:RequiredFieldValidator>
        </div>

       <br />
         <div class="auto-style20">
            Please select the activity undertaken from the pick list:&nbsp; 
            <asp:DropDownList ID="ActivitySelect" runat="server" DataTextField="txtName" DataValueField="TblActivityManagerGroupId" CssClass="newStyle1" AutoPostBack="True">
    </asp:DropDownList>
                <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ControlToValidate="ActivitySelect" 
                ErrorMessage="Please select your answer" style="text-align: left; font-weight: 700; color: #FF0000; font-size: medium;">!</asp:RequiredFieldValidator>
            <asp:SqlDataSource ID="iSAMSActivity" runat="server" ConnectionString="<%$ ConnectionStrings:iSAMSConnectionString %>" SelectCommand="SELECT txtName, intActivity, intFolder, TblActivityManagerGroupId FROM TblActivityManagerGroup WHERE (intFolder = @intFolder) ORDER BY txtName ASC">
                <SelectParameters>
                    <asp:ControlParameter ControlID="CategorySelect" Name="intFolder" PropertyName="SelectedValue" Type="Int32" />
                </SelectParameters>
        </asp:SqlDataSource>                    
            </div>
            <div class="auto-style19">

任何想法如何让它工作 - 请记住我对 C# 非常陌生,这是我的第一个项目,所以我边走边学,所以我不知道在哪里放置编码解决方案。

下面是代码:

 protected void ActivitySelect_SelectedIndexChanged(object sender, EventArgs e)
{
    ActivitySelect.Items.Clear();
    ActivitySelect.Items.Add(new ListItem("--Select Activity--", ""));

    ActivitySelect.AppendDataBoundItems = true;
    String strConnString = ConfigurationManager
        .ConnectionStrings["iSAMSConnectionString"].ConnectionString;
    String strQuery = "select txtName, TblActivityManagerGroupID from dbo.TblActivityManagerGroup " +
                       "where intFolder=@intFolder";
    SqlConnection con = new SqlConnection(strConnString);
    SqlCommand cmd = new SqlCommand();
    cmd.Parameters.AddWithValue("@intFolder",
        CategorySelect.SelectedItem.Value);
    cmd.CommandType = CommandType.Text;
    cmd.CommandText = strQuery;
    cmd.Connection = con;
    try
    {
        con.Open();
        ActivitySelect.DataSource = cmd.ExecuteReader();
        ActivitySelect.DataTextField = "txtName";
        ActivitySelect.DataValueField = "TblActivityManagerGroupID";
        ActivitySelect.DataBind();
        if (ActivitySelect.Items.Count > 1)
        {
            ActivitySelect.Enabled = true;
        }
        else
        {
            ActivitySelect.Enabled = false;
        }
    }
    finally
    {
        con.Close();
        con.Dispose();
    }
}

}

【问题讨论】:

  • 显示的 DropDownList 没有将其链接到显示的 SqlDataSource 的 DataSourceID 属性???
  • sql查询需要写“ORDER BY txtname asc”
  • @MandarDhadve 我已在 asc 中添加,但这对结果没有影响。
  • @NineBerry 数据源 ID 应用于顶部下拉列表,因为这是一个级联参数。下拉列表生成正确的字段,只是没有按字母顺序列出。如果这也需要声明的 DataSource,我会假设它不会带来任何回报??
  • 显示完整的源代码或者更好的是创建一个mcve

标签: c# asp.net alphabetical cascadingdropdown


【解决方案1】:

正如建议的那样,标记中声明的SqlDataSource 根本没有使用,但是查询是从后面的代码中创建的。后面代码中ActivitySelect_SelectedIndexChanged()方法中的SQL语句你得改一下:

String strQuery = "select txtName, TblActivityManagerGroupID from dbo.TblActivityManagerGroup " +
   "where intFolder=@intFolder order by txtName ";

或者,通过使用DropDownList 上的DataSourceID 属性链接到正确的SqlDataSource,将代码更改为实际使用标记中的SqlDataSource

【讨论】:

  • 非常感谢。我添加到后面的代码,一切都很好。
猜你喜欢
  • 1970-01-01
  • 2019-12-26
  • 2011-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多