双击编辑单元格的值[DataGrid - WebFrom]

发表于:2007-06-30来源:作者:点击数: 标签:
思路: 在控件创建时为每个单元格添加双击事件,并标上单元格的行号与列号。 鼠标双击某个单元格时,该单元格的行号与列号做为参数传回 服务器 。 DataGrid重新绑定时修改对象单元格的值。 已知问题:当单元格内容带有单引号(‘)时,内容将会别截断。但是后来
思路:

在控件创建时为每个单元格添加双击事件,并标上单元格的行号与列号。

鼠标双击某个单元格时,该单元格的行号与列号做为参数传回服务器

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+"@#)";

}

}

}



原文转自:http://www.ltesting.net