有很多控件生成的事件处理程序都带有一个object类型的参数sender,往往有大多数初学者不知道这个参数怎么用,其实这个参数从它的命名上就可以知道:它是整个事件处理程序的发起者,知道这一点做一些事情,往往就简单了,下面这个例子是选择gridview中的radiobutton(一般放在模板列中的radiobutton是不能实现只选择一个的)。
protected void rbtnSel_CheckedChanged(object sender, EventArgs e)
{
for (int i = 0; i < this.GridView1.Rows.Count; i++)
{
((RadioButton)this.GridView1.Rows[i].FindControl("rbtnSel")).Checked = false;
}
((RadioButton)sender).Checked = true;
}
当然,如果数据量大的话,刷新是让人受不了的。
所以还有一种方式(非原创)就是使用javascript。
function setRadio(nowRadio)
{
var myForm,objRadio;
myForm=document.forms[0];
for(var i=0;i<myForm.length;i++)
{
if(myForm.elements[i].type=="radio")
{
objRadio=myForm.elements[i];
if(objRadio!=nowRadio && objRadio.name.indexOf("ctgenter")>-1 && objRadio.name.indexOf("rbtnstate")>-1)
{
if(objRadio.checked)
{
objRadio.checked=false;
}
}
}
}
}
然后在服务器端添加radiobutton的属性就可以了:
protected void ctgenter_ItemDataBound(object sender, DataGridItemEventArgs e)
{
//给每个RadioButton1绑定setRadio事件
try
{
((RadioButton)e.Item.FindControl("rbtnstate")).Attributes.Add("onclick", "setRadio(this)");
}
catch (Exception)
{ }
}
当然,sender的用法还有很多,大家可以留言交流。