思路:
在控件创建时为每个单元格添加双击事件,并标上单元格的行号与列号。
鼠标双击某个单元格时,该单元格的行号与列号做为参数传回服务器。
datagrid重新绑定时修改对象单元格的值。
已知问题:当单元格内容带有单引号(‘)时,内容将会别截断。但是后来输入的不会有这种情况。
那位高人知道怎么解决的话,请一定告诉我。
e-mail:czhenq@163.com
.aspx文件中添加
//返回行号、列号
function dg_dbclick(rowid,columnid)
{
window.form1.action="dbclick.aspx"+"?rowid="+rowid+"&columnid="+columnid;
window.form1.submit();
}
//返回修改后的文本
function txtcell_onchange()
{
window.form1.changetext.value = window.form1.txtcell.value;
}
//文本框keypress事件
function txtcell_onkeypress()
{
//
}
.cs文件
private void page_load(object sender, system.eventargs e)
{
// 在此处放置用户代码以初始化页面
if(!page.ispostback)
{
binddata();
}
else
{
//行id
string rowid = request["rowid"] as string;
//列id
string columnid = request["columnid"] as string;
//文本框中的数据
string str = request["changetext"] as string;
//有行、列id时才重新绑定
if(rowid != "" && columnid != "" && str == "" )
{
binddata2(int.parse(rowid),int.parse(columnid));
}
else
{
//更新程序
label1.text = str;
}
}
}
//双击单元格后重新绑定控件
void binddata2(int rowid, int columnid)
{
sqlconnection conn = new sqlconnection("server=.;database=northwind;uid=sa;pwd=angel");
sqldataadapter da = new sqldataadapter("select top 20 customerid,companyname,contactname,contacttitle,address from customers",conn);
dataset ds = new dataset();
da.fill(ds,"customers");
datatable dt = ds.tables[0];
datarow dr = dt.rows[rowid];
string cellvalue = dr[columnid].tostring();
//修改单元格内容
//onblur 失去焦点
//onkeypress
//onchange
//………………
string strtext = "<input type=text id=txtcell
onblur=javascrite:txtcell_onblur()
onkeypress=javascript:txtcell_onkeypress() onchange=javascript:txtcell_onchange() value="+cellvalue+">";
dr[columnid] = strtext;
datagrid1.datasource = dt;
datagrid1.databind();
conn.dispose();
}
//一般情况下绑定控件
void binddata()
{
sqlconnection conn = new sqlconnection("server=.;database=northwind;uid=sa;pwd=angel");
sqldataadapter da = new sqldataadapter("select top 20 customerid,companyname,contactname,contacttitle,address from customers",conn);
dataset ds = new dataset();
da.fill(ds,"customers");
datagrid1.datasource = ds.tables[0].defaultview;
datagrid1.databind();
conn.dispose();
}
private void datagrid1_itemdatabound(object sender, system.web.ui.webcontrols.datagriditemeventargs e)
{
//为每个单元格添加双击事件
if(e.item.itemtype == listitemtype.alternatingitem || e.item.itemtype == listitemtype.item)
{
//鼠标指针样式
e.item.style.add("cursor","hand");
tablecell cell;
for(int i=0;i<e.item.cells.count;i++)
{
cell = e.item.cells[i];
int rowid = e.item.itemindex;
int columnid = i;
//鼠标停在单元格上时的样式
cell.attributes["onmouseover"]="this.style.backgroundcolor=#d3d3d3";
//鼠标离开时的样式
cell.attributes["onmouseout"]="this.style.backgroundcolor=#ffffff";
cell.attributes["ondblclick"]="javascript:dg_dbclick("+rowid+","+columnid+")";
}
}
}
