功能:点击页面上的按钮,在页面上自动添加一组两个DropDownList控件(DropDownList1,Control),当DropDownList1选择值为1时,Control控件变成textbox,当DropDownList1选择值为2时,Control控件变成DropDownList
问题:选择DropDownList1时,两个控件都消失,应该是DropDownList1的DropDownList.AutoPostBack = true;
刷新页面造成的,现在不知道有啥好方法实现描述的功能(应该是用Ajax,不过我不是很熟,回答请详细一些~~~~~)以下是我的代码html代码
<asp:UpdatePanel ID="UpdatePanel_AddCol" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<div id="addcol" class="clsColumn4" runat ="server"></div>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Button_UpdatePanel_AddCol" EventName="Click" />
</Triggers>
</asp:UpdatePanel>c#代码protected void Button_UpdatePanel_AddCol_Click(object sender, EventArgs e)
{
DropDownList ddl = new DropDownList();
ddl.ID = "ph1";
DropDownList DropDownList = new DropDownList();
ddl.Items.Add(new ListItem("(指定しない)", ""));
using (ContactViewDetailDataSetTableAdapters.contact_data_infoTableAdapter ta1
= new ContactViewDetailDataSetTableAdapters.contact_data_infoTableAdapter())
{
using (ContactViewDetailDataSet.contact_data_infoDataTable dt1
= ta1.GetItemData())
{
for (int m = 0; m < dt1.Rows.Count; m++)
{
DropDownList.Items.Add(new ListItem(dt1.Rows[m]["item_name"].ToString(), dt1.Rows[m]["item_id"].ToString()));
}
DropDownList.Items.Insert(0, new ListItem("(指定しない)", ""));
DropDownList.SelectedIndexChanged += new EventHandler(DropDownList_SelectedIndexChanged);
DropDownList.AutoPostBack = true;
}
}
this.addcol.Controls.Add(DropDownList);
this.addcol.Controls.Add(ddl);
}
protected void DropDownList_SelectedIndexChanged(object sender, EventArgs e)
{
Control phtmp = this.FindControl("ph1");
DropDownList ddl = sender as DropDownList; Control tmpctrl;
string item_id = ddl.SelectedValue.ToString();
if (item_id.Length == 0)
{
addcol.Controls.Remove(phtmp);
DropDownList ddltmp = new DropDownList();
ddltmp.Items.Add(new ListItem("(指定しない)", ""));
addcol.Controls.Add(ddltmp);
}
else
{
tmpctrl = CheckControls(Convert.ToInt16(item_id));
addcol.Controls.Remove(phtmp);
addcol.Controls.Add(tmpctrl);
} }
问题:选择DropDownList1时,两个控件都消失,应该是DropDownList1的DropDownList.AutoPostBack = true;
刷新页面造成的,现在不知道有啥好方法实现描述的功能(应该是用Ajax,不过我不是很熟,回答请详细一些~~~~~)以下是我的代码html代码
<asp:UpdatePanel ID="UpdatePanel_AddCol" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<div id="addcol" class="clsColumn4" runat ="server"></div>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Button_UpdatePanel_AddCol" EventName="Click" />
</Triggers>
</asp:UpdatePanel>c#代码protected void Button_UpdatePanel_AddCol_Click(object sender, EventArgs e)
{
DropDownList ddl = new DropDownList();
ddl.ID = "ph1";
DropDownList DropDownList = new DropDownList();
ddl.Items.Add(new ListItem("(指定しない)", ""));
using (ContactViewDetailDataSetTableAdapters.contact_data_infoTableAdapter ta1
= new ContactViewDetailDataSetTableAdapters.contact_data_infoTableAdapter())
{
using (ContactViewDetailDataSet.contact_data_infoDataTable dt1
= ta1.GetItemData())
{
for (int m = 0; m < dt1.Rows.Count; m++)
{
DropDownList.Items.Add(new ListItem(dt1.Rows[m]["item_name"].ToString(), dt1.Rows[m]["item_id"].ToString()));
}
DropDownList.Items.Insert(0, new ListItem("(指定しない)", ""));
DropDownList.SelectedIndexChanged += new EventHandler(DropDownList_SelectedIndexChanged);
DropDownList.AutoPostBack = true;
}
}
this.addcol.Controls.Add(DropDownList);
this.addcol.Controls.Add(ddl);
}
protected void DropDownList_SelectedIndexChanged(object sender, EventArgs e)
{
Control phtmp = this.FindControl("ph1");
DropDownList ddl = sender as DropDownList; Control tmpctrl;
string item_id = ddl.SelectedValue.ToString();
if (item_id.Length == 0)
{
addcol.Controls.Remove(phtmp);
DropDownList ddltmp = new DropDownList();
ddltmp.Items.Add(new ListItem("(指定しない)", ""));
addcol.Controls.Add(ddltmp);
}
else
{
tmpctrl = CheckControls(Convert.ToInt16(item_id));
addcol.Controls.Remove(phtmp);
addcol.Controls.Add(tmpctrl);
} }
解决方案 »
- 在UI层中为何调不到DAL层
- winform控件的使用问题,本人初次使用winform,麻烦各位大大帮忙,公司项目非常急,谢谢大家!
- 大家帮忙看看这个问题jquery
- 【求助】调用sql脚本问题!
- 请问声明数组时如何给数组名带入一个变量,达到用循环批量生成数组的目的啊?
- 关于大数值相加! <溢出问题>
- 为什么还是没有找到这个Microsoft.Office.Interop.Word.dll?
- 求正则表达式提取url的问题!
- VS.NET开发工具之怪事
- 怎样才能命名这样的一个空间:xxx.System
- DXperience 如何让gridcontrol作为输入控件
- 用代码创建数据库,并且指定数据库的位置
你可以直接在page_load方法中,取到dropdownlist的值,再赋值给自己不完了
DropDownList DropDownList = new DropDownList();
ddl.Items.Add(new ListItem("(指定しない)", ""));这样的功能使用显示、隐藏的方法很好实现的
<script runat="server"> protected void Button1_Click(object sender, EventArgs e)
{
if (Request.RequestType == "POST")
{
int num = Convert.ToInt32(Request.Form["count"]);
for (int i = 0; i < num; i++)
{
Response.Write("<li>你输入的内容:Text" + i + " = " + Request.Form["Text" + i] + " Select" + i + " = " + Request.Form["Select" + i]);
}
}
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script>
var num = 0;
function Add() {
d1 = document.createElement("input")
d1.name = "Text" + num;
d2 = document.createElement("select")
d2.name = "Select" + num;
d2.options[d2.options.length] = new Option("1", "A")
d2.options[d2.options.length] = new Option("2", "B")
d2.options[d2.options.length] = new Option("3", "X")
document.getElementById("a").appendChild(d1)
document.getElementById("a").appendChild(d2)
document.getElementById("a").appendChild(document.createElement("br")); document.getElementById("count").value = num;
num++;
}
</script>
</head>
<body>
<form id="Form1" runat="server">
<input name="count" id="count" type="hidden" value="0" />
<input type="button" value="添加" onclick="Add()" />
<div id="a"></div>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="查询" />
</form>
</body>
ddl.ID = "ph1";
DropDownList DropDownList = new DropDownList();
ddl.Items.Add(new ListItem("(指定しない)", ""));
这种做法不太好,既然每次页面上都要显示,为什么不在ASPX中就放置好,在后台只需要绑定数据就行了(或者控制显示/隐藏)。没必要每次都在服务端动态的new()
如果你实在要这么做,建议移到Page_Init事件中