DropDownList二级联动的问题

cucu_love_lilie 2005-06-23 01:11:54
数据库里有两个表,province(province_id和province_name)和city(city_id,city_name,province_id)
我的代码是这么写的
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'在此处放置初始化页的用户代码
If Not IsPostBack Then
Province_Bind()
Province_SelectedIndexChanged()
End If
End Sub

Sub Province_Bind()
Dim DS As New DataSet
Dim MyConnection As New OleDbConnection
Dim MyCmd As New OleDbDataAdapter
MyConnection = New OleDbConnection("Provider=Microsoft.Jet.Oledb.4.0;Data Source=" + Server.MapPath("../data/db.mdb"))
MyCmd = New OleDbDataAdapter("Select Province_id,Province_name From Province", MyConnection)
DS = New DataSet
MyCmd.Fill(DS, "Province")
Province.DataSource = DS.Tables("Province").DefaultView
Province.DataValueField = "province_id"
Province.DataTextField = "province_name"
Province.DataBind()
End Sub

Sub Province_SelectedIndexChanged()
Dim DS As New DataSet
Dim MyConnection As New OleDbConnection
Dim MyCmd As New OleDbDataAdapter
MyConnection = New OleDbConnection("Provider=Microsoft.Jet.Oledb.4.0;Data Source=" + Server.MapPath("../data/db.mdb"))
MyCmd = New OleDbDataAdapter("Select City_ID, City_Name From City Where Province_ID='" & Province.SelectedItem.Value & "'", MyConnection)
DS = New DataSet
MyCmd.Fill(DS, "City")
City.DataSource = DS.Tables("City").DefaultView
City.DataValueField = "City_ID"
City.DataTextField = "City_Name"
City.DataBind()
End Sub
End Class
运行提示出错:System.Data.OleDb.OleDbException: 标准表达式中数据类型不匹配。我也不知道我这么写对不对,谁能给指点一下!
...全文
369 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
enjsky 2005-07-26
  • 打赏
  • 举报
回复
看看 ,描述的比较清楚
完全真正的客户端无刷新
http://blog.csdn.net/enjsky/archive/2005/05/21/377755.aspx
自然框架 2005-07-26
  • 打赏
  • 举报
回复
我刚刚整理出来了一个 无限级、无刷新、联动下拉列表框。
支持 firefox
已经封装成了一个服务器控件

使用方法

设置属性:
Lst1.setLevelCount = 2;
Lst1.ListBindSQL = "select T1ID as id, col2 as txt FROM table1 SELECT T1ID,T2ID,col3 FROM Table2";

setLevelCount 是级数,也就是下拉列表框的个数,最小是2,最大理论上是不限的。
ListBindSQL 是查询语句,
第一个是给主下拉列表框(第一个)用的,主义必须有id 和 txt字段(没有的话用 as )。

后面的是给其他的列表框的,有几个列表框就写几条查询语句,
要注意字段的先后顺序:
第一个(T1ID)是父ID,就是和上一级相关联的字段;
第二个(T2ID)是自己的ID;
第三个就是要显示的内容了。

取值:
Lst1.ListMasterSelectedValue //或取第一个列表框的selectItemValue值
Lst1.ListMasterSelectedText //获取第一个列表框的selectItem.Text值

Lst1.ListOtherSelectedValue //或取列表框的selectItemValue值,用“|”分隔
Lst1.ListOtherSelectedText //获取列表框的selectItem.Text值,用“|”分隔


http://www.itnz.cn/bbs/HDLabShowPost.aspx?ForumID=47&TopicID=4844
这里有源代码
dbstudio 2005-06-23
  • 打赏
  • 举报
回复
看的一头雾水,不知道谁能解释一下这些代码
hchxxzx 2005-06-23
  • 打赏
  • 举报
回复
无刷新联动效果
以下为页面代码:

<form id="Form1" method="post" runat="server">
<asp:DropDownList id="DropDownList1" runat="server"></asp:DropDownList>
<asp:DropDownList id="DropDownList2" runat="server"></asp:DropDownList>
<SCRIPT LANGUAGE="JavaScript">
<!--
//以XML求取数据
function XmlPost(obj)
{
  var svalue = obj.value;
  var webFileUrl = "?brc_id=" + svalue;
  var result = "";
  var xmlHttp = new ActiveXObject("MSXML2.XMLHTTP");
  xmlHttp.open("POST", webFileUrl, false);
  xmlHttp.send("");
  result = xmlHttp.responseText;
  
  if(result != "")
  {
    document.all("DropDownList2").length=0;
    var piArray = result.split(",");
    for(var i=0;i<piArray.length;i++)
    {
      var ary1 = piArray[i].toString().split("|");
      //alert(ary1[0].toString());
      document.all("DropDownList2").options.add(new Option(ary1[1].toString(),ary1[0].toString()));
    }
  }
  else
  {
    alert(result);
  }
}
//-->
</SCRIPT>    
</form>

以下为后台代码:

private System.Data.OleDb.OleDbConnection conn;

private DataTable get_dt(string sql)
{
  string connstr = "Provider=MSDAORA.1;Password=aqjc;User ID=aqjc;Data Source=aqjc";
  this.conn = new OleDbConnection(connstr);
  this.conn.Open();
  OleDbCommand myOleDbCommand = new OleDbCommand(sql,this.conn);
  OleDbDataAdapter myData = new OleDbDataAdapter(myOleDbCommand);

  DataSet myDataset = new DataSet();
  try
  {
    myData.Fill(myDataset);
  }
  catch(Exception ex)
  {
    throw ex;
  }

  this.conn.Close();
  return myDataset.Tables[0];  
}

private void Page_Load(object sender, System.EventArgs e)
{
  string brc_id = this.Request.QueryString["brc_id"];
  if(brc_id + "a" != "a")
  {
    this.down2_bind(brc_id);
  }

  if(!this.IsPostBack)
  {
    this.down1_bind();
  }
}

/// <summary>
/// 返回第2个下拉框需要的值给xmlhttp
/// </summary>
/// <param name="brc_id"></param>
private void down2_bind(string brc_id)
{
  string mystr = "";
  string sql = "select brc_id,brc_name from asm_branch where brc_parentid = '" + brc_id + "'";
  DataTable mytab = this.get_dt(sql);

  if(mytab.Rows.Count != 0)
  {
    for(int i=0;i<mytab.Rows.Count;i++)
    {
      mystr += "," + mytab.Rows[i][0].ToString() + "|" + mytab.Rows[i][1].ToString();
    }
    mystr = mystr.Substring(1);
  }
  this.Response.Write(mystr);
  this.Response.End();
}

/// <summary>
/// 绑定第一个下拉框
/// </summary>
private void down1_bind()
{
  string sql = "select brc_id,brc_name from asm_branch where brc_level = '1'";
  DataTable mytab = this.get_dt(sql);
  this.DropDownList1.DataSource = mytab;
  this.DropDownList1.DataValueField = "brc_id";
  this.DropDownList1.DataTextField = "brc_name";
  this.DropDownList1.DataBind();
  this.DropDownList1.Attributes.Add("onchange","XmlPost(this);");
}
lovefootball 2005-06-23
  • 打赏
  • 举报
回复
无刷新的联动这个坛子里到处都是

http://community.csdn.net/Expert/topic/4020/4020941.xml?temp=.8197901
http://community.csdn.net/Expert/topic/4047/4047953.xml?temp=.7239038
fphuang 2005-06-23
  • 打赏
  • 举报
回复
to:cucu_love_lilie(钱钧)
留个邮箱,我给你发
cucu_love_lilie 2005-06-23
  • 打赏
  • 举报
回复
能给个详细的代码吗?
fphuang 2005-06-23
  • 打赏
  • 举报
回复
第一个dropdownlist直接帮顶数据库中的数据而第二个需要利用一些销手段了,首先根据第一个所选得结果查询到相应的数据,然后保存到客户端---利用js方法写到第二个dropdownlist中去
cucu_love_lilie 2005-06-23
  • 打赏
  • 举报
回复
问题解决了,我想请问一下,在此基础上能改成无刷新的吗?
cucu_love_lilie 2005-06-23
  • 打赏
  • 举报
回复
先谢谢4位,改了的确没有错误,但是如果用Private Sub Province_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Province.SelectedIndexChanged
Dim DS As New DataSet
Dim MyConnection As New OleDbConnection
Dim MyCmd As New OleDbDataAdapter
MyConnection = New OleDbConnection("Provider=Microsoft.Jet.Oledb.4.0;Data Source=" + Server.MapPath("../total_data/lovelilie.mdb"))
MyCmd = New OleDbDataAdapter("Select City_ID, City_Name From City Where Province_ID=" & Province.SelectedItem.Value, MyConnection)
DS = New DataSet
MyCmd.Fill(DS, "City")
City.DataSource = DS.Tables("City").DefaultView
City.DataValueField = "City_ID"
City.DataTextField = "City_Name"
City.DataBind()

绑定后没有第二个dropdownlist没有显示了
hchxxzx 2005-06-23
  • 打赏
  • 举报
回复
在ACCESS中,如果是数字类型的字段,不能在参数前后加单引号.这就是你所出现的错误.
具体解决方法如孟子所言
renyu732 2005-06-23
  • 打赏
  • 举报
回复
先按net_lover(孟子E章)做一下,看成不.

代码初看起来没什么问题的
fphuang 2005-06-23
  • 打赏
  • 举报
回复
c#的代码可以吗,如果可以,留个邮箱,我给你发
孟子E章 2005-06-23
  • 打赏
  • 举报
回复
Where Province_ID=" & Province.SelectedItem.Value ,

62,041

社区成员

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

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

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

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