如:网面中有一绑定后的datagrid生成代码如下
<table>
<tr>
<td>第一行</td>
<td>
<input type="button" value="隐藏" onclick="GoShowDetail(this,2);" />
</td>
</tr>
<tr>
<td>第二行
</td>
</tr>
</table>
function GoShow(btn,i)
{
var tr = btn.parentElement.parentElement.nextSibling;
tr.style.display = (i==1)?"":"none";
}
点击"button"隐藏后隐藏了第二行
但当执行了后台事件的时候"第二行"又显示出来了我想问一下有没有什么方法让页面保持我那一次的javascript操作;也就是点击了其他后台事件“第二行”也就隐藏的谢谢
<table>
<tr>
<td>第一行</td>
<td>
<input type="button" value="隐藏" onclick="GoShowDetail(this,2);" />
</td>
</tr>
<tr>
<td>第二行
</td>
</tr>
</table>
function GoShow(btn,i)
{
var tr = btn.parentElement.parentElement.nextSibling;
tr.style.display = (i==1)?"":"none";
}
点击"button"隐藏后隐藏了第二行
但当执行了后台事件的时候"第二行"又显示出来了我想问一下有没有什么方法让页面保持我那一次的javascript操作;也就是点击了其他后台事件“第二行”也就隐藏的谢谢
解决方案 »
- asp.net程序调试出现乱码
- 刚学ASP.NET,请教个简单问题
- ObjectDataSource参数类型转化的问题,在线等结贴......................
- |M| 如何用Session代替Form认证? 也就是说如何不用在每个页面都判断Session["id"]!=null 然后再转向login.aspx页面
- 请教SqlCommand.Parameter问题
- 为何出错
- 在datalist中显示新闻标题,如何做到此新闻有图后面加个(图)
- 网页传值问题?
- 急问:在ASP.NET中的服务器控件比如TEXTBOX,BUTTON怎么用CSS修饰??
- 救命:在LinkButton点击事件中,给DropDownList 赋值,居然后没有反应。
- 其实很不理解很多人的做法!既然有 FileUpload1.SaveAs
- |M| VS2005中如何设置让一个td 100%的高
或者在GoShow里对另一个隐藏域赋值做标识,执行服务器端事件的同时接收这个隐藏域的值(Request.Form),然后根据这个值重新生成一个datagrid或者生成一个JS脚本在客户端加载完毕后改变标记行的状态
怎么做都麻烦,不好做啊,也可能是我没想出好办法……
<tr>
<td>第一行</td>
<td>
<input type="button" value="隐藏" onclick="GoShowDetail(this,2);" />
</td>
</tr>
<tr>
<td>第二行
<asp:HiddenField ID="Hf" runat="server" />
</td>
</tr>
</table>
我用这个但怎么把"Hf".clientidy传到GoShowDetail这里呢
function GoShow(btn,i)
{
var tr = btn.parentElement.parentElement.nextSibling;
tr.style.display = (i==1)?"":"none";
tr.?? 获得那个行中"Hf".clientidy //也就是br下面td下面的第一个控件
}
function GoShow(btn,i)
{
var tr = btn.parentElement.parentElement.nextSibling;
tr.style.display = (i==1)?"":"none";
var obj = document.getElementById('<%=Hf.ClientID%>');
}
//上面这个obj就是你的Hf对象了
var obj = document.getElementById('<%=Hf.ClientID%>');
可以行到这个HF.clientID但我这是一个绑定行
我上面只是取得结果的某一行来做例子谢谢
以下没有测试.functoin SaveCheckState()
{
var tb = document.getElementById("DataGrid1");
var str = "";
for(var i=0;i<tb.rows.length;i++)
{
str += (tb.rows[i].cells[1].firstChild.checked?"1":"0") +",";
} str = str.substr(0,str.length-1);
Form1.Hidden1.value = str;
}
function GoShow(btn,i)
{
var tr = btn.parentElement.parentElement.nextSibling;
tr.style.display = (i==1)?"":"none";
SaveCheckState(); //调用这个函数
}
你的好像是改变全的啊.
这样操作就多了,
我只想操作当绑定行的那个HF值
如btn.parentElement.parentElement.nextSibling.??.??.value="1"
这样
然后在itemdatabound中判断是1还是0 显示隐藏
str = str.substr(0,str.length-1);
是什么意思
str = str.substr(0,str.length-1); //去掉最后一个字各符,也是就,
function GoShowDetail(btn,i)
{
var tr = btn.parentElement.parentElement.nextSibling;
tr.style.display = (i==1)?"":"none";
var hf=tr.firstChild.firstChild
hf.value=="1"?hf.value="0":hf.value="1";
alert(hf.value);
}
可以正确给hf赋值
但是我的后台中的ItemCreated事件中
并不能得到我用javascript赋的值
可以知道赋值是正确的
但我后台
HiddenField hf = ((HiddenField)e.Item.FindControl("Hf"));
if (hf.Value == "1")
{
hf.Parent.Parent.Visible = true;
}
得到的fg.value为""
alert(hf.tagName);看看
alert(hf.value);
alert(hf.value);这个可以得到1或0但我点击了别的按钮后在后台的ItemCreated就得不到了
(因为没有执行itemdatabound所以改写在ItemCreated)
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
System.Collections.Hashtable ht = new Hashtable();
ht.Add("AAAAAAAAAAAAAAAAAAAAAAAAAA", true);
ht.Add("BB", false);
ht.Add("CC", "2");
ht.Add("DD", "3333333333333333333333333333333333");
ht.Add("EE", "3");
this.GridView1.DataSource = ht;
this.GridView1.DataBind();
this.Repeater1.DataSource = ht;
this.Repeater1.DataBind();
} }
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
GridViewRow row = e.Row;
GridViewRow NewRow = new GridViewRow(0, 0, DataControlRowType.DataRow, DataControlRowState.Normal);
NewRow.Cells.Add(new TableCell());
NewRow.Cells[0].ColumnSpan = row.Cells.Count;
NewRow.Style.Add("display", "none"); DataTable dt = new DataTable();
dt.Columns.Add("A", typeof(string));
dt.Columns.Add("B", typeof(string));
dt.Columns.Add("C", typeof(Int32));
DataRow r1 = dt.NewRow();
r1[0] = "软件工程";
r1[1] = "06-01-12";
r1[2] = 8000;
dt.Rows.Add(r1);
r1 = dt.NewRow();
r1[0] = "网站开发";
r1[1] = "06-11-10";
r1[2] = 12000;
dt.Rows.Add(r1); this.GridView1.Controls[0].Controls.Add(NewRow);
GridView gv = new GridView();
gv.RowDataBound += new GridViewRowEventHandler(gv_RowDataBound);
gv.DataSource = dt.DefaultView;
gv.DataBind();
NewRow.Cells[0].Controls.Add(gv);
}
protected void gv_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
e.Row.Attributes.Add("bgcolor", "#cccccc");
}
}
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{ }
protected void Button1_Click(object sender, EventArgs e)
{
string aa = HiddenField1.Value;
}
protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{ DataTable dt = new DataTable();
dt.Columns.Add("A", typeof(string));
dt.Columns.Add("B", typeof(string));
dt.Columns.Add("C", typeof(Int32));
DataRow r1 = dt.NewRow();
r1[0] = "软件工程";
r1[1] = "06-01-12";
r1[2] = 8000;
dt.Rows.Add(r1);
r1 = dt.NewRow();
r1[0] = "网站开发";
r1[1] = "06-11-10";
r1[2] = 12000;
dt.Rows.Add(r1);
GridView mygv = ((GridView)(e.Item.FindControl("gv_1")));
mygv.DataSource = dt;
mygv.DataBind();
}
protected void Repeater1_ItemCreated(object sender, RepeaterItemEventArgs e)
{
HiddenField hf = ((HiddenField)e.Item.FindControl("Hf"));
if (hf.Value == "1")
{
hf.Parent.Parent.Visible = true;
}
}
protected void Repeater1_PreRender(object sender, EventArgs e)
{
}
aspx:
<form id="form1" runat="server">
<table>
<asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Repeater1_ItemDataBound" OnItemCreated="Repeater1_ItemCreated">
<ItemTemplate>
<tr>
<td><%# Eval("key") %>
</td>
<td><%# Eval("value") %>
</td>
<td><input type="button" value="显示" onclick="GoShowDetail(this,1);" />
<input type="button" value="隐藏" onclick="GoShowDetail(this,2);" />
</td>
</tr>
<tr style="display:none">
<td colspan="3">
<asp:HiddenField ID="Hf" runat="server" Value="0"/>
<asp:GridView ID="gv_1" runat="server">
</asp:GridView>
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
</table>
<div>
<asp:GridView AutoGenerateColumns="false" ID="GridView1" runat="server" OnRowDataBound="GridView1_RowDataBound"
OnRowCommand="GridView1_RowCommand">
<Columns>
<asp:BoundField DataField="Key" HeaderText="Key" />
<asp:BoundField DataField="Value" HeaderText="Value" />
<asp:TemplateField>
<ItemTemplate>
<input type="button" value="显示" onclick="GoShowDetail(this,1);" />
<input type="button" value="隐藏" onclick="GoShowDetail(this,2);" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" /> <script type="text/javascript">
function GoShowDetail(btn,i)
{
var tr = btn.parentElement.parentElement.nextSibling;
tr.style.display = (i==1)?"":"none";
var hf=tr.firstChild.firstChild
hf.value=="0"?hf.value="1":hf.value="0";
alert(hf.value);
}
function SaveCheckState()
{
var tb = document.getElementById("Repeater1");
var str = "";
for(var i=0;i<tb.rows.length;i++)
{
str += (tb.rows[i].cells[1].firstChild.checked?"1":"0") +",";
}
str = str.substr(0,str.length-1);
Form1.HiddenField1.value = str;
}
</script> <asp:HiddenField ID="HiddenField1" runat="server" /> </div>
</form>
现在我改用Repeater做也实现了
上面的代码和页面