我加了个checkbox 绑定数据的时候出错了。。 前台页面添加了个 <asp:TemplateField HeaderText="Edit"> <ItemTemplate> <asp:CheckBox ID="cb1" runat ="server"/> </ItemTemplate> </asp:TemplateField> 为什么绑定数据的时候会报 Callbacks are not supported on TemplateField because some controls cannot update properly in a callback. Turn callbacks off on 'GridView1'. 这个错 我想实现的是点击某一条数据的CheckBox,数据自动填充到对应的textbox里去。。
没代码怎么能空写
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<style type="text/css">
.trover
{
background-color: Green;
}
.trout
{
background-color: White;
}
</style> <script type="text/javascript">
function trover(obj) {
if (obj.tagName == "TR") {
obj.className = "trover";
}
} function trout(obj) {
if (obj.tagName == "TR") {
obj.className = "trout";
}
} function filldata(obj) {
if (obj.tagName == "TD") {
document.getElementById("txt").value = obj.innerHTML;
}
}
</script></head>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="GridView1" runat="server">
</asp:GridView>
<input type="text" id="txt" />
</div>
</form>
</body>
</html>using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;namespace WebApp {
public partial class gridSample : System.Web.UI.Page {
protected void Page_Load(object sender, EventArgs e) {
DataTable dt = new DataTable();
dt.Columns.Add("A", typeof(string));
dt.Columns.Add("B", typeof(string));
dt.Columns.Add("C", typeof(string));
dt.Columns.Add("X", typeof(int));
dt.Columns.Add("Y", typeof(int));
dt.Columns.Add("Time", typeof(DateTime)); dt.Rows.Add(new object[] { "a", "b", "c", 1, 100, new DateTime(2010, 10, 11, 8, 0, 0, 0) });
dt.Rows.Add(new object[] { "a", "b", "c", 1, 150, new DateTime(2010, 10, 11, 8, 15, 0, 0) });
dt.Rows.Add(new object[] { "a", "b", "d", 1, 120, new DateTime(2010, 10, 11, 8, 20, 0, 0) });
dt.Rows.Add(new object[] { "a", "b", "c", 1, 200, new DateTime(2010, 10, 11, 8, 40, 0, 0) });
dt.Rows.Add(new object[] { "a", "b", "c", 1, 130, new DateTime(2010, 10, 11, 9, 5, 0, 0) }); //a |b| c|... | 1 |180|9:30|
dt.Rows.Add(new object[] { "a", "b", "c", 1, 180, new DateTime(2010, 10, 11, 9, 30, 0, 0) });
//添加辅助字段
dt.Columns.Add("T", typeof(string));
foreach (DataRow r in dt.Rows) {
r["T"] = DateTime.Parse(r["Time"].ToString()).ToString("yyMMddHH");
} DataTable dtClone = dt.Clone();
foreach (DataRow r in dt.Rows) {
DataRow[] rows = dtClone.Select(string.Format("A='{0}' and B='{1}' and C='{2}' and T='{3}'", r["A"], r["B"], r["C"], r["T"]));
if (rows.Length == 0) {
dtClone.ImportRow(r);
}
else {
int x = 0, y = 0; int.TryParse(rows[0]["X"].ToString(), out x);
int.TryParse(rows[0]["Y"].ToString(), out y);
x += int.Parse(r["X"].ToString());
y += int.Parse(r["Y"].ToString());
rows[0]["X"] = x;
rows[0]["Y"] = y;
}
}
GridView1.DataSource = dtClone;
GridView1.RowCreated += new GridViewRowEventHandler(GridView1_RowCreated);
this.DataBind();
} void GridView1_RowCreated(object sender, GridViewRowEventArgs e) {
e.Row.Attributes.Add("onmouseover", "trover(this)");
e.Row.Attributes.Add("onmouseout", "trout(this)");
foreach (TableCell ctl in e.Row.Cells) {
ctl.Attributes.Add("onclick", "filldata(this)");
}
}
} public struct areamsgnode {
public string ption;
public Int64 pointbegin;
public Int64 pointend;
public Int64 size;
}
}
<script type="text/javascript" language=javascript>
function show(obj) {
document.getElementById("TextBox1").value = obj.innerText;
}
</script>
<asp:GridView ID="GridView1" DataKeyNames="url" runat="server" OnRowCommand="GridView1_RowCommand" AutoGenerateColumns="False"
OnSelectedIndexChanged="GridView1_SelectedIndexChanged"
onrowdeleting="GridView1_RowDeleting">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<span onclick="show(this);"><%#Eval("url") %></span>
</ItemTemplate>
</asp:TemplateField>
<asp:CommandField ShowDeleteButton="True" />
</Columns>
</asp:GridView>
<asp:TextBox ID="TextBox2" runat="server" onclick="alert('1');"></asp:TextBox>
<html>
<head>
<title>无标题页</title>
<script type="text/javascript" language="javascript">
window.onload=function(){
var tds = document.getElementById("GridView1").getElementsByTagName("td");//gridview在客户端生成html标签是table,每一行tr,每一行中的每一列是都是td,这句js讲客户端中的所有td取出来。楼主在用的时候("GridView1")这句里面的id要替换成"<%=服务器控件id.ClientId=%>",我这没vs,clientid这个属性可能会有拼写错误,你在vs里面打的时候注意一下
//下面这个循环是给每一个td绑定一个click事件,当某一个td被点击后,那么就将该td所属的tr(也就是这一行)里的所有td的值取出来(这里有点绕,其实就是把与被点击的td同属于一行的所有数据取出来),并放在div1里面
for(var i = 0;i < tds.length;i++){
tds[i].onclick=function(){
var text="";
//(event.srcElement||event.target)这个取的是事件源,就是谁调用这个事件,就返回谁.这里返回的是被点击的td,parentNode返回他的父节点,就是tr,把tr里面所有的td取出来。
var tds = (event.srcElement||event.target).parentNode.getElementsByTagName("td");
//循环把所有td里的数据拉出来,然后放进div1里面
for(var j = 0;j < tds.length;j++){
text+=tds[j].innerText+" ";
}
document.getElementById("div1").innerText=text;
}
}
}
</script>
</head><body>
<table cellspacing="0" rules="all" border="1" id="GridView1" style="border-collapse:collapse;">
<tr>
<th scope="col">hisbannerid</th><th scope="col">hisbannertext</th><th scope="col">hisbannerurl</th><th scope="col">hisbanneren</th><th scope="col">hisbannersys</th>
</tr><tr id="tr1">
<td>1</td><td>资料研究 </td><td>research/default.asp </td><td><span disabled="disabled" title="hisbanneren"><input id="GridView1_ctl02_ctl00" type="checkbox" name="GridView1$ctl02$ctl00" checked="checked" disabled="disabled" /></span></td><td><span disabled="disabled" title="hisbannersys"><input id="GridView1_ctl02_ctl01" type="checkbox" name="GridView1$ctl02$ctl01" disabled="disabled" /></span></td>
</tr><tr>
<td>2</td><td>研究专题 </td><td>theme/default.asp </td><td><span disabled="disabled" title="hisbanneren"><input id="GridView1_ctl03_ctl00" type="checkbox" name="GridView1$ctl03$ctl00" checked="checked" disabled="disabled" /></span></td><td><span disabled="disabled" title="hisbannersys"><input id="GridView1_ctl03_ctl01" type="checkbox" name="GridView1$ctl03$ctl01" checked="checked" disabled="disabled" /></span></td>
</tr><tr>
<td>3</td><td>资料检索 </td><td>search/default.asp </td><td><span disabled="disabled" title="hisbanneren"><input id="GridView1_ctl04_ctl00" type="checkbox" name="GridView1$ctl04$ctl00" checked="checked" disabled="disabled" /></span></td><td><span disabled="disabled" title="hisbannersys"><input id="GridView1_ctl04_ctl01" type="checkbox" name="GridView1$ctl04$ctl01" disabled="disabled" /></span></td>
</tr><tr>
<td>4</td><td>关于我们 </td><td>showtheme.asp?tid=101 </td><td><span disabled="disabled" title="hisbanneren"><input id="GridView1_ctl05_ctl00" type="checkbox" name="GridView1$ctl05$ctl00" checked="checked" disabled="disabled" /></span></td><td><span disabled="disabled" title="hisbannersys"><input id="GridView1_ctl05_ctl01" type="checkbox" name="GridView1$ctl05$ctl01" disabled="disabled" /></span></td>
</tr><tr>
<td>5</td><td>系统管理 </td><td>sysman/default.asp </td><td><span disabled="disabled" title="hisbanneren"><input id="GridView1_ctl06_ctl00" type="checkbox" name="GridView1$ctl06$ctl00" checked="checked" disabled="disabled" /></span></td><td><span disabled="disabled" title="hisbannersys"><input id="GridView1_ctl06_ctl01" type="checkbox" name="GridView1$ctl06$ctl01" checked="checked" disabled="disabled" /></span></td>
</tr>
</table>
<div id="div1"></div>
</body>
</html>
纯手工js,我自己也找了很多资料,总算是弄出来了
楼主只要看上面的js就可以了,下面的table就是gridView在客户端生成的html。因为只有td绑定了click事件所以点击头部是不会把头部信息都打印出来的。
我加了个checkbox 绑定数据的时候出错了。。
前台页面添加了个 <asp:TemplateField HeaderText="Edit">
<ItemTemplate>
<asp:CheckBox ID="cb1" runat ="server"/>
</ItemTemplate>
</asp:TemplateField>
为什么绑定数据的时候会报
Callbacks are not supported on TemplateField because some controls cannot update properly in a callback. Turn callbacks off on 'GridView1'.
这个错
我想实现的是点击某一条数据的CheckBox,数据自动填充到对应的textbox里去。。