gpt4 book ai didi

c# - 使用 c# 在 asp.net 中的 sqlserver 的下拉列表中显示数据

转载 作者:太空宇宙 更新时间:2023-11-03 13:34:17 24 4
gpt4 key购买 nike

我在下面的代码中有三个下拉列表

  <asp:DropDownList ID="ForumTitleList" runat="server"

AutoPostBack="True">
</asp:DropDownList>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<asp:DropDownList ID="ForumSubTitleList" runat="server" AutoPostBack="True"
>
</asp:DropDownList>
&nbsp;&nbsp;&nbsp;
<asp:DropDownList ID="ForumSubjectTitleList" runat="server" AutoPostBack="True"
>
</asp:DropDownList>

后面的代码是

enter code here 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Configuration;
using System.Net;
using System.Net.Mail;
using System.Data.Sql;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using System.Text.RegularExpressions;

namespace Auzine.Forums
{
public partial class ForumIT : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)

{
ConfigurationFuntion();

DropForumTitle();
DropForumSubTitle();
DropForumSubjectTitle();
}


protected void DropForumTitle()
{
if (!Page.IsPostBack)
{

string connection = System.Configuration.ConfigurationManager.ConnectionStrings["AuzineConnection"].ConnectionString;

string selectSQL = "select DISTINCT ForumTitlesID,ForumTitles from ForumTtitle";
SqlConnection con = new SqlConnection(connection);
SqlCommand cmd = new SqlCommand(selectSQL, con);
SqlDataReader reader;
try
{

ListItem newItem = new ListItem();
newItem.Text = "Select";
newItem.Value = "0";
ForumTitleList.Items.Add(newItem);
con.Open();
reader = cmd.ExecuteReader();



while (reader.Read())
{
ListItem newItem1 = new ListItem();
newItem1.Text = reader["ForumTitles"].ToString();
newItem1.Value = reader["ForumTitlesID"].ToString();
ForumTitleList.Items.Add(newItem1);



}
reader.Close();
reader.Dispose();
con.Close();
con.Dispose();
cmd.Dispose();


}
catch (Exception ex)
{
Response.Write(ex.Message);
}
//////////////////

}
}
protected void DropForumSubjectTitle()
{
if (Page.IsPostBack)
{
// ForumSubjectTitleList.Items.Clear();
string connection = System.Configuration.ConfigurationManager.ConnectionStrings["AuzineConnection"].ConnectionString;
SqlConnection con = new SqlConnection(connection);

con.Open();



SqlCommand com = new SqlCommand("select DISTINCT ForumSubjectTitle from ForumSubject where ForumSubTitlesID='" + ForumSubTitleList.SelectedValue.ToString() + "'", con);
SqlDataReader reader = com.ExecuteReader();
// ForumTitleList.Items.Clear();

while (reader.Read())
{
ForumSubjectTitleList.Items.Add(reader[0].ToString());


}

reader.Close();
con.Close();



}

}

protected void DropForumSubTitle()
{


if (Page.IsPostBack)
{
ForumSubTitleList.Items.Clear();
string connection = System.Configuration.ConfigurationManager.ConnectionStrings["AuzineConnection"].ConnectionString;
string selectSQL = "select DISTINCT ForumTitlesID,ForumSubTitles from ForumSubtitle where ForumTitlesID='" + ForumTitleList.SelectedValue.ToString() + "' ";
SqlConnection con = new SqlConnection(connection);
SqlCommand cmd = new SqlCommand(selectSQL, con);
SqlDataReader reader;
try
{

ListItem newItem = new ListItem();
newItem.Text = "Select";
newItem.Value = "0";
ForumSubTitleList.Items.Add(newItem);
con.Open();
reader = cmd.ExecuteReader();



while (reader.Read())
{
ListItem newItem1 = new ListItem();
newItem1.Text = reader["ForumSubTitles"].ToString();
newItem1.Value = reader["ForumTitlesID"].ToString();
ForumSubTitleList.Items.Add(newItem1);



}
reader.Close();
reader.Dispose();
con.Close();
con.Dispose();
cmd.Dispose();


}
catch (Exception ex)
{
Response.Write(ex.Message);
}
//////////////////

}
}
}

DropForumTitle() for dropdown1(ForumTitleList) list 1 工作正常,然后 dropdown2(ForumSubTitleList) ) then it is not showing any thing but when change the code from if (!Page.IsPostBack) to if (Page.IsPostBack) then it shows but the selected index goes aoutomatically to 0... It display right but when select any option从 dropdown2(ForumSubTitleList) 然后默认转到选定的索引 0,对于此错误,dropdown3(ForumSubjectTitleList) 可以接收选定的项目值并且不显示数据库中的主题列表...如果下拉列表显示,每个下拉列表都与一个 ID 连接任何东西然后第二个下拉 = 到下拉列表 1 的选定值并且与 dropdown3 相同 = 到 dropdown2 的选定值

但是我在使用 dropdown2 和 dropdown3 时遇到错误

简而言之:

1-dropdown2 不保留为我选择的值:假设在列表 A、b、C 和 D 中。当我单击 A 时,它返回并且选择的值再次为 A;

2- dropdown3 无法访问 dropdown2 的选定值,因此它没有显示任何内容...

最佳答案

在每次回传中,您对每个下拉列表都做了两件事:

  1. 用数据重新填充它
  2. 填充下一个

第一步是删除您选择的值。当您清除值并添加新值时,它无法保留所选值。

您需要将这些操作分开。对于初学者,我们假设您有 DropDownList1 并且它的选择应该驱动 DropDownList2。然后 Page_Load 应该只填充 DropDownList1 并且仅当它不是回发时。像这样:

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
PopulateDropDownList1();
}

要填充 DropDownList2,您需要响应 DropDownList1SelectedIndexChanged 事件。像这样:

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
var value = DropDownList1.SelectedValue;
PopulateDropDownList2(value);
}

请记住,Page_Load 在页面的每次 加载时都会调用,甚至回传,它被称为之前 事件,例如 SelectedIndexChanged。因此,如果您在 Page_Load 中重新填充父列表,则 SelectedIndexChanged 中将不再有选定值。

在上述场景中,事件的顺序是:

  1. 用户加载页面。
  2. Page_Load 执行。
  3. 这不是回发,因此 DropDownList1 会填充值。
  4. 用户在 DropDownList1 中选择一个值并触发回发。
  5. Page_Load 执行。
  6. 一个回发,所以Page_Load 不做任何事情。
  7. DropDownList1_SelectedIndexChanged 执行。
  8. DropDownList2 填充了值。

此时,用户现在可以看到他们在 DropDownList1 中选择的内容以及在 DropDownList2 中的新值。将其扩展到第三个 DropDownList 是相同的模式。您将创建一个 DropDownList2_SelectedIndexChanged,其功能与 DropDownList1_SelectedIndexChanged 相同,但具有下一个级联列表。

关于c# - 使用 c# 在 asp.net 中的 sqlserver 的下拉列表中显示数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19198181/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com