我有一个像这样的js函数:
<script type="text/javascript">
function Cols() {
rows = document.getElementById("GridView1").rows;
for (i = 0; i < rows.length; i++) {
rows[i].cells[8].style.visibility = "visible";
rows[i].cells[9].style.visibility = "visible";
rows[i].cells[10].style.visibility = "visible";
rows[i].cells[11].style.visibility = "visible";
rows[i].cells[12].style.visibility = "visible";
rows[i].cells[13].style.visibility = "visible";
rows[i].cells[14].style.visibility = "visible";
}
}
</script>
此按钮带有OnClientClick事件:
<asp:Button ID="Add_Button" runat="server" OnClick="Add_Button_Click" Text="Add New Record" OnClientClick="Cols()" />
我的函数中的单元格指向我想在客户端显示的Gridview列,然后转到服务器端的OnClick事件,这使我的GridView页脚行可见,页脚行用于插入新行
编辑: 所以这是我原来的问题:单击按钮时我想让其他列可见,然后在同一个点击事件中显示页脚行。然而,在事件被提升之后,额外的列被显示但不是页脚行,直到我再次单击该按钮。
这是我的Click事件:
protected void Add_Button_Click(object sender, EventArgs e)
{
if (GridView1.FooterRow.Visible == false)
{
GridView1.FooterRow.Visible = true;
Add_Button.Text = "Cancel";
Panel2.Visible = false;
}
else
{
GridView1.FooterRow.Visible = false;
Add_Button.Text = "Add New Record";
GridView1.Columns[10].Visible = false;
GridView1.Columns[11].Visible = false;
GridView1.Columns[12].Visible = false;
GridView1.Columns[13].Visible = false;
GridView1.Columns[14].Visible = false;
GridView1.Columns[15].Visible = false;
GridView1.Columns[16].Visible = false;
}
}
但是,当我单击按钮时,我的OnClick事件被引发但不是OnClientClick。为什么会这样?
答案 0 :(得分:0)
您需要取消按钮的默认操作,即回发。
将其更改为此(请注意返回false部分):
<asp:Button ID="Add_Button" runat="server" OnClick="Add_Button_Click" Text="Add New Record" OnClientClick="Cols(); return false;" />
答案 1 :(得分:0)
是什么告诉您OnClientClick
事件未被提出?
据我所知,它被引发,但之后,紧接着,您回发到服务器以执行服务器上的OnClick
事件。
所以你没有看到正在执行的Cols()
函数。
尝试以这种方式结束Cols()
功能:
return false; // prevent the OnClick event from being fired
这样,只会触发OnClientClick
事件,而不会触发OnClick
事件。
显然,在这一点上保持两者是没有意义的。
两个都有意义的唯一情况是像这样的JS函数:
return confirm("Are you sure to execute OnClick?");
如果用户选择“否”,他将停留在页面上,否则回发。
答案 2 :(得分:0)
最简单的选择,一起摆脱客户端并将按钮单击更改为以下内容:
protected void Add_Button_Click(object sender, EventArgs e)
{
if (Add_Button.Text != "Cancel") //Add Record
{
GridView1.FooterRow.Visible = true;
Add_Button.Text = "Cancel";
Panel2.Visible = false;
}
else //Cancel
{
GridView1.FooterRow.Visible = false;
Add_Button.Text = "Add New Record";
GridView1.Columns[10].Visible = false;
GridView1.Columns[11].Visible = false;
/*etc*/
}
}
这是另一个可能更强大的Servierside选项
protected void Add_Button_Click(object sender, EventArgs e)
{
bool visibility = false;
string buttonText = string.empty;
if (Add_Button.Text != "Cancel") //Add Record
{
visibility = true;
buttonText = "Cancel";
Panel2.Visible = false;
}
else //Cancel
{
visibility = false;
buttonText = "Add New Record";
}
Add_Button.Text = buttonText;
ridView1.FooterRow.Visible = visibility;
GridView1.Columns[10].Visible = visibility;
GridView1.Columns[11].Visible = visibility;
/*etc*/
}
你真的没有通过客户端发生的事情获得任何东西,然后立即回复。
您的另一个选择是在客户端进行。我不太了解你Grdiveiw
给出一个定制的答案,但这里有你需要做的基础知识:
display:none
如果您的网格具有固定数量的列,您甚至可能会变得棘手,只需使用聪明的CSS来隐藏页脚和列,而无需在服务器上执行任何操作。