思路:
在控件创建时为每个单元格添加双击事件,并标上单元格的行号与列号。
鼠标双击某个单元格时,该单元格的行号与列号做为参数传回服务器。
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+"')";
}
}
}