当Gridview中的下拉框触发触发时,避免刷新
本文关键字:刷新 Gridview | 更新日期: 2023-09-27 18:12:54
我正在动态地创建一个下拉列表和一个gridview中的文本框。该文本框当前处于禁用状态。这两个控件的id都是从一个SQL表中获取的(因此它们本质上也是动态的,因为从SQL接收到的值可能会改变)。
我希望文本框只有在新生成的下拉列表中选择"Other"时才启用。下面是我生成的下拉列表的代码:
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
e.Row.Cells[0].Visible = false;
e.Row.Cells[1].Width = 400;
e.Row.Cells[2].Visible = false;
e.Row.Cells[3].Visible = false;
e.Row.Cells[4].Visible = false;
e.Row.Cells[5].Width = 300;
e.Row.Cells[6].Visible = false;
e.Row.Cells[7].Visible = false;
e.Row.Cells[8].Visible = false;
e.Row.Cells[9].Width = 300;
string anstype = e.Row.Cells[2].Text;
string ansname = e.Row.Cells[3].Text;
string othertype = e.Row.Cells[6].Text;
string othername = e.Row.Cells[7].Text;
if (anstype == "DropDownList")
{
DropDownList ddl = new DropDownList();
ddl.ID = ansname;
ddl.AutoPostBack = true;
ddl.SelectedIndexChanged += new EventHandler(ddl_SelectedIndexChanged);
ddl.Width = 300;
e.Row.Cells[5].Controls.Add(ddl);
}
if (othertype == "Free Text")
{
TextBox txt = new TextBox();
txt.ID = othername;
txt.Width = 300;
txt.Enabled = false;
e.Row.Cells[9].Controls.Add(txt);
}
protected void ddl_SelectedIndexChanged(object sender, EventArgs e)
{
DropDownList ddlName = new DropDownList();
ddlName = (DropDownList)sender;
string val = ddlName.SelectedItem.Text.ToString();
if (val == "Other")
{
//ENABLE THE TEXT BOX
}
}
我能想到的最简单的方法是将文本框的名称(othername变量)传递给事件处理程序。虽然我是c#的新手,但我不知道该怎么做。请帮. . ! !
! ! . .编辑. . ! !
我找到了参考文本的方法,但现在我面临另一个问题。因为"AutoPostBack",整个GridView得到刷新,下拉列表的even没有被触发。有什么建议吗?
从目前给出的评论来看,如果我可以总结一下,你有一组调查问题正在从你的数据库中加载出来。您希望人们从控件中选择答案,然后针对这些问题生成服务器端控件。到目前为止,这些都很简单,但它变得复杂的地方是,当他们从答案下拉框中选择'Other'时,你想要一个文本框出现,并在那个框中获得他们的其余回答。如果您尝试在服务器端这样做,因为控件通常不是gridview列定义的一部分,它们都会消失,您将失去答案。
为什么不尝试总是有文本框,并通过javascript设置其CSS可见性属性代替?一个示例函数(来自这里)是:
<script type="text/javascript">
function toggleVisibility(controlId)
{
var control = document.getElementById(controlId);
if(control.style.visibility == "visible" || control.style.visibility == "")
control.style.visibility = "hidden";
else
control.style.visibility = "visible";
}
</script>
因此,您将在下拉的Click
事件中绑定对该函数(或包装器函数)的调用,并且始终将页面上的文本框隐藏起来。这样,你就不需要在他们所有的答案都完成并提交之前回复了。