两个下拉框数据互连问题。。。

dys_198102 2008-07-15 01:30:45
当我点大类的时候,如果这个大类里有小类的话,小类下拉框激活。在不类框中显示大类的小类列表,如果没有小类不激活。
代码如下。数据库都写好了,就是不知道怎么让这两个下拉框互联起来。。

protected void Page_Load(object sender, EventArgs e)
{
OleDbConnection connstr = DBConnections.DBConnections.createConnection();
connstr.Open();

OleDbCommand cmd = new OleDbCommand();
cmd.Connection = connstr;
cmd.CommandText = "SELECT [BigID], [BigClassName] FROM [Hover_BigClass_New]";



DataSet daset = new DataSet();
OleDbDataAdapter ol = new OleDbDataAdapter();
ol.SelectCommand = cmd;
ol.Fill(daset);

if (daset.Tables.Count > 0)
{
if (daset.Tables[0].Rows.Count > 0)
{
ClassNews.Enabled = true;
ClassNews.AutoPostBack = true;
ClassNews.DataSource = daset;
ClassNews.DataTextField = "BigClassName";
ClassNews.DataValueField = "BigID";
ClassNews.DataBind();
if(Request["BigClassName"].ToString()!=null)
{
////////////小类
String BigClassNames = Request["BigClassName"].ToString();
OleDbCommand cmd1 = new OleDbCommand();
cmd1.Connection = connstr;
cmd1.CommandText = "Select * From Hover_SmallClass_New where BigClassName='" + BigClassNames + "'";

DataSet ds1 = new DataSet();
OleDbDataAdapter dsda = new OleDbDataAdapter();
dsda.SelectCommand = cmd1;
dsda.Fill(ds1);

if (ds1.Tables.Count > 0)
{
if (ds1.Tables[0].Rows.Count > 0)
{
SmallClassNews.DataSource = ds1;
SmallClassNews.Enabled = true;
SmallClassNews.DataTextField = "SmallClassName";
SmallClassNews.DataValueField = "SmallClassID";
SmallClassNews.DataBind();
}
else
{
SmallClassNews.Enabled = false;
}
}
else
{
SmallClassNews.Enabled = false;
}
ds1.Dispose();
ds1 = null;
          ///////////小类结束
}

}
else
{
ClassNews.Enabled = false;
}
}
else
{
ClassNews.Enabled = false;
}

ol.Dispose();
ol = null;

connstr.Close();

}
以下是前台代码
<asp:DropDownList ID="ClassNews" runat="server" Height="23px" Width="86px">
</asp:DropDownList>

 <asp:DropDownList ID="SmallClassNews" runat="server" Height="23px" Width="86px">
</asp:DropDownList>
...全文
236 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
dys_198102 2008-07-17
  • 打赏
  • 举报
回复
if (dataSet.Tables[0].Rows.Count > 0)
{
DropDownList3.Enabled = true;
ImageButton1.Enabled = true;
Label1.Text = "";
DropDownList3.DataSource = dataSet;
DropDownList3.DataTextField = "textfield";
DropDownList3.DataValueField = "id";
DropDownList3.DataBind();
if(Request.QueryString["chubanshe"]!=null)
if (DropDownList3.Items.FindByValue(Request.QueryString["chubanshe"].ToString()) != null)
DropDownList3.Items.FindByValue(Request.QueryString["chubanshe"].ToString()).Selected = true;
}//如果含有记录就说明有新的数据
else
{
Label1.Text = "当前年级的所选学科暂时没有内容,<a href='addleibie.aspx'>去添加学科内容>></a>";
DropDownList3.Enabled = false;
ImageButton1.Enabled = false;
}
这是别人的代码,但是那几句我并没有看懂,希望能找到一个解决的方法
dys_198102 2008-07-17
  • 打赏
  • 举报
回复
我用updatePanel解决了刷新问题,只要是回答的根我的问题有关系,根据实际情况都会给分,谢谢你们,不过还有一个问题,
当我选大类列表其他项的时候,并没有停在选中的那一项,而是又回到了大类列表的第一项数据那,比如,大类有,AA,BB,CC
我点了BB,但是列表没有停在BB上,而是又回到了AA.....怎么解决这个问题...
代码如下:
protected void Page_Load(object sender, EventArgs e)
{
this.bindtopDL();
this.bindsubDL();

}
private void bindtopDL()
{
OleDbConnection connstr = DBConnections.DBConnections.createConnection();
connstr.Open();

OleDbCommand cmd = new OleDbCommand();
cmd.Connection = connstr;
cmd.CommandText = "SELECT * FROM [Hover_BigClass_New]";


DataSet daset = new DataSet();
OleDbDataAdapter ol = new OleDbDataAdapter();
ol.SelectCommand = cmd;
ol.Fill(daset);

if (daset.Tables[0].Rows.Count > 0)
{
ClassNews.AutoPostBack = true;
ClassNews.DataSource = daset;
ClassNews.DataTextField = "BigClassName";
ClassNews.DataValueField = "BigClassID";
ClassNews.DataBind();

}
else
{
ClassNews.AutoPostBack = false;
}
ol.Dispose();
ol = null;
connstr.Close();
}

private void bindsubDL()
{
if (this.ClassNews.SelectedItem.ToString() != "")
{
OleDbConnection connstr = DBConnections.DBConnections.createConnection();
connstr.Open();

OleDbCommand cmd1 = new OleDbCommand();
cmd1.Connection = connstr;
cmd1.CommandText = "Select * From Hover_SmallClass_New where BigClassName='" + ClassNews.SelectedItem.ToString() + "'";

DataSet ds1 = new DataSet();
OleDbDataAdapter dsda = new OleDbDataAdapter();
dsda.SelectCommand = cmd1;
dsda.Fill(ds1);

if (ds1.Tables[0].Rows.Count > 0)
{
SmallClassNews.Enabled = true;
SmallClassNews.DataSource = ds1;
SmallClassNews.DataTextField = "SmallClassName";
SmallClassNews.DataValueField = "SmallClassID";
SmallClassNews.DataBind();

}
else
{
SmallClassNews.Enabled = false;
}
ds1.Dispose();
ds1 = null;
connstr.Close();
}
}





protected void ClassNews_SelectedIndexChanged(object sender,System.EventArgs e)
{
this.bindsubDL();
}
ljb0502 2008-07-17
  • 打赏
  • 举报
回复
呵呵 已经这么多人回答了 用updatePanel没错了 双手同意.....updatePanel
oec2003 2008-07-17
  • 打赏
  • 举报
回复
用微軟的updatepanel 做聯動不是很好 dropdown選擇的時候 頁面或有閃爍,雖然不刷

最好是自己寫ajax 比如使用ajax.dll 或是jquery
ccaakkee 2008-07-17
  • 打赏
  • 举报
回复
帮顶
lingxyd_0 2008-07-17
  • 打赏
  • 举报
回复
路过
jf
mengxj85 2008-07-17
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 xlong224 的回复:]
先写2个事件
drop1_selectedChaning() 大类的
drop2_....()小类的
第1个大类的直接绑定数据库
第2个小类的把drop1.selecedValue值传到第2个小类的数据库源上
在大类的changing事件里调用小类的changing 就可以了

就会显示在你选大类时小类自动绑定了.
[/Quote]
也可以用JS来秦无刷新二级联动呀,用ASP.NET的回调接口,效果还不错,正在使用中,跟AJAX思想一样
dys_198102 2008-07-17
  • 打赏
  • 举报
回复
问题解决,附上代码,前台
<form id="form1" runat="server">
<div>

<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="ClassNews" EventName="SelectedIndexChanged" />
</Triggers>
<ContentTemplate>
<fieldset>
<legend></legend>



新闻标题<asp:TextBox ID="title" runat="server"></asp:TextBox>
<br />
<br />
新闻类别  


<asp:DropDownList ID="ClassNews" runat="server" Height="23px" Width="86px"
AutoPostBack="True" OnSelectedIndexChanged="ClassNews_SelectedIndexChanged">
</asp:DropDownList>

 <asp:DropDownList ID="SmallClassNews" runat="server" Height="23px" Width="86px">
</asp:DropDownList>
  
<br />

<br />

<br />
<asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>
<br />
<br />
<asp:Label ID="Label3" runat="server" Text="Label"></asp:Label>
</fieldset>
</ContentTemplate>
</asp:UpdatePanel>
新闻内容
<cc1:HtmlEditor ID="HtmlEditor1" runat="server" TF_EditHtml="1" TF_UpTu="1" ResourcesPath="HtmlEditor" />

<br />
<br />

<br />
<br />
发布人<asp:TextBox ID="person" runat="server"></asp:TextBox>
<br />
<br />
摘录网址<asp:TextBox ID="zWeb" runat="server"></asp:TextBox>
<br />
<br />
录入时间<asp:TextBox ID="time" runat="server"></asp:TextBox>
<br />
<br />
<br />
<asp:Button ID="Button1" runat="server" Text="提交" onclick="Button1_Click" />

<br />
<br />
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>






</div>
</form>
后台代码
public partial class admins_addnew : System.Web.UI.Page
{

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

this.bindtopDL();
this.bindsubDL();
}
}
private void bindtopDL()
{
OleDbConnection connstr = DBConnections.DBConnections.createConnection();
connstr.Open();

OleDbCommand cmd = new OleDbCommand();
cmd.Connection = connstr;
cmd.CommandText = "SELECT * FROM [Hover_BigClass_New]";


DataSet daset = new DataSet();
OleDbDataAdapter ol = new OleDbDataAdapter();
ol.SelectCommand = cmd;
ol.Fill(daset);

if (daset.Tables[0].Rows.Count > 0)
{
ClassNews.AutoPostBack = true;
ClassNews.DataSource = daset;
ClassNews.DataTextField = "BigClassName";
ClassNews.DataValueField = "BigClassID";
ClassNews.DataBind();

}
else
{
ClassNews.AutoPostBack = false;
}
ol.Dispose();
ol = null;
connstr.Close();
}

private void bindsubDL()
{
if (this.ClassNews.SelectedItem.ToString() != "")
{
OleDbConnection connstr = DBConnections.DBConnections.createConnection();
connstr.Open();

OleDbCommand cmd1 = new OleDbCommand();
cmd1.Connection = connstr;
cmd1.CommandText = "Select * From Hover_SmallClass_New where BigClassName='" + ClassNews.SelectedItem.ToString() + "'";

DataSet ds1 = new DataSet();
OleDbDataAdapter dsda = new OleDbDataAdapter();
dsda.SelectCommand = cmd1;
dsda.Fill(ds1);

if (ds1.Tables[0].Rows.Count > 0)
{

SmallClassNews.Enabled = true;
SmallClassNews.DataSource = ds1;
SmallClassNews.DataTextField = "SmallClassName";
SmallClassNews.DataValueField = "SmallClassID";
SmallClassNews.DataBind();

}
else
{
SmallClassNews.Enabled = false;

}
ds1.Dispose();
ds1 = null;
connstr.Close();
}
else
{

SmallClassNews.Enabled = false;
}
}





protected void ClassNews_SelectedIndexChanged(object sender,System.EventArgs e)
{
this.bindsubDL();
}
xlong224 2008-07-17
  • 打赏
  • 举报
回复
先写2个事件
drop1_selectedChaning() 大类的
drop2_....()小类的
第1个大类的直接绑定数据库
第2个小类的把drop1.selecedValue值传到第2个小类的数据库源上
在大类的changing事件里调用小类的changing 就可以了

就会显示在你选大类时小类自动绑定了.
march22 2008-07-16
  • 打赏
  • 举报
回复
想不刷新就用Ajax。
dys_198102 2008-07-16
  • 打赏
  • 举报
回复
march22 和lfywy 的思路还可以,不过还是要刷新的.updatePanel没有用过.不知道怎么用?晚上查一下资料.....
JeffChung 2008-07-16
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 dotnetsong 的回复:]
引用 12 楼 jl_lsj 的回复:
引用 11 楼 Catmaoo 的回复:
引用 10 楼 zld_baggio 的回复:
引用 8 楼 chinahnzl 的回复:
回答过了啊。。

想要联动,最好使用AJAX来做。。

在.net中最简单的办法就是用updatePanel..什么都不用干。。效果一样。。


这样比较简单高效
[/Quote]
DemonAngle 2008-07-16
  • 打赏
  • 举报
回复
用AJAX的联动控件啊。。。
dotnetsong 2008-07-16
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 jl_lsj 的回复:]
引用 11 楼 Catmaoo 的回复:
引用 10 楼 zld_baggio 的回复:
引用 8 楼 chinahnzl 的回复:
回答过了啊。。

想要联动,最好使用AJAX来做。。

在.net中最简单的办法就是用updatePanel..什么都不用干。。效果一样。。
[/Quote]

这样比较简单高效
aaajedll 2008-07-16
  • 打赏
  • 举报
回复
學習
路人乙e 2008-07-16
  • 打赏
  • 举报
回复
建议楼住使用iframe把下拉放在一个单独的页面中
用到的时候
var ddl1_va = window.frames[0].document.getElementById("ddl1");
将ddl1_va赋给一个hidden控件即可
路人乙e 2008-07-16
  • 打赏
  • 举报
回复
最讨厌动不动就搬ajax出来的人!
一点技术含量都没有!
march22 2008-07-16
  • 打赏
  • 举报
回复
很明显给楼主介绍使用Ajax是没用的,呵呵。

这样:

vs 2003 -- >
<asp:DropDownList ID="ClassNews" runat="server" Height="23px" Width="86px" AutoPostBack="True" SelectedIndexChanged = "ClassNews_SelectedIndexChanged">
</asp:DropDownList>

vs 2005

<asp:DropDownList ID="ClassNews" runat="server" Height="23px" Width="86px" AutoPostBack="True" OnSelectedIndexChanged="ClassNews_SelectedIndexChanged">
</asp:DropDownList>

  <asp:DropDownList ID="SmallClassNews" runat="server" Height="23px" Width="86px">
</asp:DropDownList>



private void bindtopDL()
{
OleDbConnection connstr = DBConnections.DBConnections.createConnection();
connstr.Open();

OleDbCommand cmd = new OleDbCommand();
cmd.Connection = connstr;
cmd.CommandText = "SELECT [BigID], [BigClassName] FROM [Hover_BigClass_New]";


DataSet daset = new DataSet();
OleDbDataAdapter ol = new OleDbDataAdapter();
ol.SelectCommand = cmd;
ol.Fill(daset);

if (daset.Tables[0].Rows.Count > 0)
{
ClassNews.AutoPostBack = true;
ClassNews.DataSource = daset;
ClassNews.DataTextField = "BigClassName";
ClassNews.DataValueField = "BigID";
ClassNews.DataBind();
}
else
{
ClassNews.AutoPostBack = false;
}
}

private void bindsubDL()
{
if (this.BigClassName.SelectedItem.value != "")
{
OleDbCommand cmd1 = new OleDbCommand();
cmd1.Connection = connstr;
cmd1.CommandText = "Select * From Hover_SmallClass_New where BigClassName='" +this.BigClassName.SelectedItem.value+ "'";

DataSet ds1 = new DataSet();
OleDbDataAdapter dsda = new OleDbDataAdapter();
dsda.SelectCommand = cmd1;
dsda.Fill(ds1);

if (ds1.Tables[0].Rows.Count > 0)
{
SmallClassNews.Enabled = true;
SmallClassNews.DataSource = ds1;
SmallClassNews.DataTextField = "SmallClassName";
SmallClassNews.DataValueField = "SmallClassID";
SmallClassNews.DataBind();
}
else
{
SmallClassNews.Enabled = false;
}
}


protected void Page_Load(object sender, EventArgs e)
{
this.bindtopDL();
this.bindsubDL();
}


protected void ClassNews_SelectedIndexChanged(object sender,System.EventArgs e)
{
this.bindsubDL();
}
jl_lsj 2008-07-16
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 Catmaoo 的回复:]
引用 10 楼 zld_baggio 的回复:
引用 8 楼 chinahnzl 的回复:
回答过了啊。。

想要联动,最好使用AJAX来做。。

在.net中最简单的办法就是用updatePanel..什么都不用干。。效果一样。。
[/Quote]
Catmaoo 2008-07-16
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 zld_baggio 的回复:]
引用 8 楼 chinahnzl 的回复:
回答过了啊。。

想要联动,最好使用AJAX来做。。

在.net中最简单的办法就是用updatePanel..什么都不用干。。效果一样。。
[/Quote]
加载更多回复(10)

62,133

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧