方法一:
给DataGrid增加一个有CheckBox的模版列。
在前台代码中加入如下的JavaScript
<SCRIPT language="JavaScript">
function SetCheckBoxState()
{
var dom=document.all;
var el=event.srcElement;
if(el.tagName=="INPUT"&&el.type.toLowerCase()=="checkbox" )
{
for(i=0;i<dom.length;i++)
{
if(dom[i].tagName=="INPUT"&&dom[i].type.toLowerCase()=="checkbox" )
{
dom[i].checked=false;
}
}
}
el.checked=!el.checked;
}
</SCRIPT>
然后在后台代码中加入
private void gridOrder_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if( e.Item.ItemIndex < 0 ) return;
if( e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem )
{
System.Web.UI.WebControls.CheckBox chkExport;
chkExport=(CheckBox)e.Item.FindControl( SERVICE_CHECKBOX_NAME ); //checkbox的名称
chkExport.Attributes.Add( "OnClick" , "SetCheckBoxState();" );
}
}
缺点:如果在一个页面上有两个DataGrid,第二个DataGrid就无法使用了。不然选中了第二个,第一个也没了。
方法二:
给DataGrid增加一个有CheckBox的模版列。
private void gridService_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
System.Web.UI.WebControls.CheckBox chkExport;
chkExport=(CheckBox)e.Item.FindControl( SERVICE_CHECKBOX_NAME ); //checkBox的名称
chkExport.CheckedChanged += new EventHandler( Service_CheckedChanged );
}
}
private void Service_CheckedChanged(object sender,System.EventArgs e)
{
CheckBox chbIsActive = (CheckBox)sender;
System.Web.UI.WebControls.CheckBox chkExport;
foreach ( DataGridItem item in gridService.Items )
{
chkExport = ( CheckBox )item.FindControl( SERVICE_CHECKBOX_NAME ); checkBox的名称
chkExport.Checked = false;
}
chbIsActive.Checked = true;
}
缺点:有点延迟,毕竟是服务器段的控件嘛。
如果有两个DataGrid,两个都要实现单选,第二个就用这种方法吧。
顺便把取到编号的方法也写一下吧。
private int GetServiceCode()
{
int tempFactorCode = -1 ;
System.Web.UI.WebControls.CheckBox chkExport;
foreach ( DataGridItem item in gridService.Items )
{
chkExport = ( CheckBox )item.FindControl( SERVICE_CHECKBOX_NAME );
if( chkExport.Checked )
{
//编码
tempFactorCode = Convert.ToInt32( item.Cells[
SERVICE_CODE_INDEX ].Text ); //编号所在的列
break;
}
}
return tempFactorCode;
}