我现在的问题是这样,麻烦高手帮我看下~
1:我有2个dropdownlist控件,DD1和DD2
还有3张数据表T1和T2,T3
2:需要实现的功能是:
DD1绑定T1的A字段,
当选择DD1的A1记录时,DD2读取表T2的某字段,然后textbox中需要显示T2表的其他字段中的记录~
当选择DD1的A2记录时,DD2读取表T3的某字段,然后textbox中需要显示T3表的其他字段中的记录~
依此类推……
3:我使用的方法
1)我在Pageload里把T1手动绑定到DD1,DD1,DD2的Aotupostback都为true,
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//数据绑定……
}
}2)我在DD1的SelectedIndexChanged事件中这样写
protected void DD_Class_SelectedIndexChanged(object sender, EventArgs e)
{
if (!IsPostBack)//这里是否应该判断回发,如果不判断,DD2里就没有显示,
//判读以后的问题是如果我选择DD1的第二条记录时,显示出来的是T1中的记录加上T2中的记录
{
if(DD1.SelectedIndex == 1)
{
//绑定T2
//读取T2数据给Textbox赋值
}
if(DD1.SelectedIndex == 2)
{
//绑定T3
//读取T3数据给Textbox赋值
}
}
3:我的问题就是怎么能让DD2能显示正常。还有关于IsPostBack到底是什么意思~
1:我有2个dropdownlist控件,DD1和DD2
还有3张数据表T1和T2,T3
2:需要实现的功能是:
DD1绑定T1的A字段,
当选择DD1的A1记录时,DD2读取表T2的某字段,然后textbox中需要显示T2表的其他字段中的记录~
当选择DD1的A2记录时,DD2读取表T3的某字段,然后textbox中需要显示T3表的其他字段中的记录~
依此类推……
3:我使用的方法
1)我在Pageload里把T1手动绑定到DD1,DD1,DD2的Aotupostback都为true,
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//数据绑定……
}
}2)我在DD1的SelectedIndexChanged事件中这样写
protected void DD_Class_SelectedIndexChanged(object sender, EventArgs e)
{
if (!IsPostBack)//这里是否应该判断回发,如果不判断,DD2里就没有显示,
//判读以后的问题是如果我选择DD1的第二条记录时,显示出来的是T1中的记录加上T2中的记录
{
if(DD1.SelectedIndex == 1)
{
//绑定T2
//读取T2数据给Textbox赋值
}
if(DD1.SelectedIndex == 2)
{
//绑定T3
//读取T3数据给Textbox赋值
}
}
3:我的问题就是怎么能让DD2能显示正常。还有关于IsPostBack到底是什么意思~
解决方案 »
- 如何实现动态水晶报表?
- 怎样让TreeView与GridView在一个页面里共存?
- UTF8解码问题
- 一个xml数据,一个SQL表,两者关联后怎样绑定给datagrid控件
- 在开发新闻系统时遇到的关于XML与XSL的问题,请高手赐教
- ASP MVC中的htmlhelper和java中的什么技术类似??
- ark_matrix(matrix)来领分
- 怎么样在选择DropDownListRoomState不同值的时候实时更新LabelRoomType的值
- 数据集不能fill
- 哪位大侠高抬贵手,帮忙诊断诊断
- 求助有关于VS2005自带的水晶报表如何实现问题
- 求一个 TreeView 数据绑定的例子 用DataTable 操作的
还有就是我对JS不熟悉,这个刷新不刷新都无所谓,用C#写好了,功能正常就OK了。麻烦大家帮我看看~分不够可以另外开贴加
当IsPostBack=true时表示非第一次请求
Aotupostback=true
protected void DD_Class_SelectedIndexChanged(object sender, EventArgs e)
{
if(DD1.SelectValue == "A1")
{
//绑定T2
//读取T2数据给Textbox赋值
}
if(DD1.SelectValue == "A2")
{
//绑定T3
//读取T3数据给Textbox赋值
}
}
http://www.51aspx.com/CV/AjaxProDropDownList/
好像就是回发的问题~
我再加断点看看~
贴上我的绑定代码:if (!IsPostBack)
{
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["FoodtechConnectionString"].ToString());
string strsql0 = "select * from TitleClass";
SqlDataAdapter adp0 = new SqlDataAdapter(strsql0, conn);
try
{
conn.Open();
DataSet dt = new DataSet();
adp0.Fill(dt,"TitleClass");
DD_Class.AppendDataBoundItems = true;
DD_Class.Items.Add(new ListItem("-请选择 -", "0"));
DD_Class.DataSource = dt.Tables[0].DefaultView;
DD_Class.DataTextField = "Text";
// DD_Class.DataValueField = "Number";
DD_Class.DataBind();
}
catch
{
Response.Write("<script>alert('数据库连接错误');history.go(-1);</script>");
}
finally
{
conn.Close();
conn.Dispose();
adp0.Dispose(); }
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//绑定DD1;
}
}
protected void DD_Class_SelectedIndexChanged(object sender, EventArgs e)
{
if(DD1.SelectedIndex == 1)
{
//绑定T2
//读取T2数据给Textbox赋值
}
if(DD1.SelectedIndex == 2)
{
//绑定T3
//读取T3数据给Textbox赋值
}
}
//DD2的SelectedIndexChanged事件
protected void DD2_SelectedIndexChanged(object sender, EventArgs e)
{
string selectvalue=DD2.selectvalue;
//判断selectvalue对应的是哪个表 ,读相应的数据
}
3:我的问题就是怎么能让DD2能显示正常。还有关于IsPostBack到底是什么意思~ 楼上已经解释
在第二个DropDownList中是否要判断IsPostBack
如果我写 if(!IspPostBack)那么DD2中就没有数据显示,如果我写成if (IsPostBack),那么在DD1里每选择一次数据,DD2就会多一条记录,无限叠加~
谢谢,我发现问题了
我在DD1中用了if(!isPostBack),才能使DD1中的数据正常显示,而我的SelectedIndexChanged()中写if(!isPostBack)数据就绑不上了,如果写if(isPostBack)那么数据能够显示,但是我DD1选第2项的时候,数据会加到第一项的后面。请问怎么解决
{
if (!IsPostBack)//这里是否应该判断回发,如果不判断,DD2里就没有显示,
//判读以后的问题是如果我选择DD1的第二条记录时,显示出来的是T1中的记录加上T2中的记录
{
if(DD1.SelectedIndex == 1)
{
//绑定T2
//读取T2数据给Textbox赋值
}
if(DD1.SelectedIndex == 2)
{
//绑定T3
//读取T3数据给Textbox赋值
}
}
中if (!IsPostBack)不需要的,你把这里的代码犬拿出来嘛。
1. 获取一个值,该值指示该页是否正为响应客户端回发而加载,如果是为响应客户端回发而加载该页,则为 true;
2. 是否正被首次加载和访问, 是就返回false。
protected void DD1_SelectedIndexChanged(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["FoodtechConnectionString"].ToString());
string strsql1 = "select * from News1";
string strsql2 = "select * from News2";
SqlDataAdapter adp1 = new SqlDataAdapter(strsql1, conn);
SqlDataAdapter adp2 = new SqlDataAdapter(strsql2, conn);
//读入数据
conn.Open();
DataSet dt = new DataSet();
adp1.Fill(dt,"News1");
adp2.Fill(dt, "News2");
if (DD1.SelectedIndex==1)
{
DD2.ClearSelection();
DD2.DataSourceID = null;
DD2.AppendDataBoundItems = true;
DD2.DataSource = dt.Tables[0].DefaultView;
DD2.DataTextField = "Title";
DD2.DataBind();
}
if (DD1.SelectedIndex==2)
{
DD2.ClearSelection();
DD2.DataSourceID = null;
DD2.AppendDataBoundItems = true;
DD2.DataSource = dt.Tables[1].DefaultView;
DD2.DataTextField = "Title";
DD2.DataBind();
}
conn.Close();
}
结果就是DD1选第中第一项,那么DD2中显示正常,选择DD1中的第二项,那么DD2中就是News1中的记录加上表News2的记录。如果再选DD1的第一项,News1的记录又会继续加到后面
conn.Open();
DataSet dt = new DataSet();
if (DD1.SelectedIndex==1)
{
adp1.Fill(dt,"News1");
}
if (DD1.SelectedIndex==2)
{
adp2.Fill(dt, "News2");
}
conn.Close(); DD2.ClearSelection();
DD2.DataSourceID = null;
DD2.AppendDataBoundItems = true;
DD2.DataSource = dt.Tables[0].DefaultView;
DD2.DataTextField = "Title";
DD2.DataBind(); 这样试试。还有,SelectedIndex应该是从0开始的,注意值是否正确
DD2.DataSource = dt.Tables[0];
DD2.DataTextField = "Title";
DD2.DataBind();
不行吗?我一般就这么写的啊。
在绑定数据之前要调用Item.Clear()来把前一次的Item清除掉。不然就都叠在一起了~
结贴!
1.页面第一次加载后DD1有了数据源,DD2还没有。
2.第一次点击DD1,生成DD2的数据源,并绑定上去
3.postback发生,页面刷新
4.Pageload完成
5.DataBind()被真正执行,DD2中有了数据
6.第二次点击DD1 发生postback页面再次刷新
7.pageload完成,此时DD2的数据源还没有更新
8.DataBind()被执行,DD2中的数据产生了叠加所以你把DD2的DataBind()加到page_load中去试下.不知道上面讲的对不对,仅做为一种可能。这个问题要真正解决还得去了解页面的生命周期才行。