当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没有被触发。有什么建议吗?

当Gridview中的下拉框触发触发时,避免刷新

从目前给出的评论来看,如果我可以总结一下,你有一组调查问题正在从你的数据库中加载出来。您希望人们从控件中选择答案,然后针对这些问题生成服务器端控件。到目前为止,这些都很简单,但它变得复杂的地方是,当他们从答案下拉框中选择'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事件中绑定对该函数(或包装器函数)的调用,并且始终将页面上的文本框隐藏起来。这样,你就不需要在他们所有的答案都完成并提交之前回复了。