同事写的一组代码,现在出了点bug,不知道该怎么改.
添加了DeveloperExpress.xtraGrid.gridControl控件,在gridview里显示了一组数据,每行前边添加了checkbox(checkEdit)的选择框,实现的功能是对选择的用户进行操作,但是最多只能让选5个,到了5个以后就不让选了,可取消选择选其他的用户。
现在的问题是:1、选择5个以后再点,就不能选了,然后再取消选择会报错。
2.我自己写了个buttonClick事件,目的是让所有选择都清空,重新选,其结果是没有了只能选择5个的限制,可以多选。
会的帮帮忙,谢谢了。------------------------------------- void biSendSms_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
ceIschoose.ValueChecked = false;
} void ceIschoose_EditValueChanging(object sender, ChangingEventArgs e)
{
bool isChoose = (bool)e.NewValue;
if (isChoose)
{
if (!sendSmsFamilyDic.ContainsKey(currentFamily.FamilyId))
sendSmsFamilyDic.Add(currentFamily.FamilyId, currentFamily);
}
if(!isChoose)
{
if (sendSmsFamilyDic.ContainsKey(currentFamily.FamilyId))
sendSmsFamilyDic.Remove(currentFamily.FamilyId);
}
}
void gvCremains_FocusedRowChanged(object sender, FocusedRowChangedEventArgs e)
{
gvCremains.CollapseAllDetails();
gvCremains.ExpandMasterRow(e.FocusedRowHandle);
if (sendSmsFamilyDic.Count >= 5)
{
bool isChoose = false;
int handle = e.PrevFocusedRowHandle;
DataRow row = gvCremains.GetDataRow(handle);
//出错的地方:错误是指定的转换无效。
isChoose =(bool)row["IsChoose"];
if (isChoose)
{
colIsChoose.OptionsColumn.AllowEdit = false;
}
else
{
colIsChoose.OptionsColumn.AllowEdit = true;
}
}
if (sendSmsFamilyDic.Count < 5)
{
colIsChoose.OptionsColumn.AllowEdit = true;
}
}
那就
if(row["IsChoose"]==选种)//自己想办法判断是否选种吧!
{
isChoose=true;
}
if(isChoose)
{
........
}
2 清空可用FindControl遍历一下,checked=false;
//定义了全局变量 sendSmsFamilyDic void biSendSms_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
ceIschoose.ValueChecked = false;
//如果点击则全部清空,这里的问题是,虽然清空了,但是清空以后就没有只能选5个的限制了,可以选更多,(****要解决的问题:是依然让用户只能选择5个****)
} void ceIschoose_EditValueChanging(object sender, ChangingEventArgs e)
{
bool isChoose = (bool)e.NewValue;
//这里就不是很明白了,只知道选中某个选择项,这里的isChoose的值就会变为true
if (isChoose)
{
if (!sendSmsFamilyDic.ContainsKey(currentFamily.FamilyId))
sendSmsFamilyDic.Add(currentFamily.FamilyId, currentFamily);
///如果选中,而且不包含选中的记录,则增加
}
if(!isChoose)
{
if (sendSmsFamilyDic.ContainsKey(currentFamily.FamilyId))
sendSmsFamilyDic.Remove(currentFamily.FamilyId);
///如果撤销选中,而且包含选中的记录,则删除
}
} void gvCremains_FocusedRowChanged(object sender, FocusedRowChangedEventArgs e)
{
gvCremains.CollapseAllDetails();
gvCremains.ExpandMasterRow(e.FocusedRowHandle);
if (sendSmsFamilyDic.Count >= 5)
{
bool isChoose = false;
int handle = e.PrevFocusedRowHandle;
//这个地方实现的功能我就不是很清楚了 DataRow row = gvCremains.GetDataRow(handle);
//出错的地方:错误是指定的转换无效。
isChoose =(bool)row["IsChoose"];
if (isChoose)
{
colIsChoose.OptionsColumn.AllowEdit = false;
//不允许选择
}
else
{
colIsChoose.OptionsColumn.AllowEdit = true;
}
}
if (sendSmsFamilyDic.Count < 5)
{
colIsChoose.OptionsColumn.AllowEdit = true;
//如果选择的数量少于5个,则允许选择
}
}
当我执行了代码1后,就再也不能执行代码2了。
代码1:
void biSendSms_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
ceIschoose.ValueChecked = false;
//如果点击则全部清空,这里的问题是,虽然清空了,但是清空以后就没有只能选5个的限制了,可以选更多,(****要解决的问题:是依然让用户只能选择5个****)
}
代码2:
void gvCremains_FocusedRowChanged(object sender, FocusedRowChangedEventArgs e)
{
gvCremains.CollapseAllDetails();
gvCremains.ExpandMasterRow(e.FocusedRowHandle);
if (sendSmsFamilyDic.Count >= 5)
{
bool isChoose = false;
int handle = e.PrevFocusedRowHandle;
//这个地方实现的功能我就不是很清楚了 DataRow row = gvCremains.GetDataRow(handle);
//出错的地方:错误是指定的转换无效。
isChoose =(bool)row["IsChoose"];
if (isChoose)
{
colIsChoose.OptionsColumn.AllowEdit = false;
//不允许选择
}
else
{
colIsChoose.OptionsColumn.AllowEdit = true;
}
}
if (sendSmsFamilyDic.Count < 5)
{
colIsChoose.OptionsColumn.AllowEdit = true;
//如果选择的数量少于5个,则允许选择
}
}
用javascript实现吧 以下是例子: <form id="form1" runat="server">
<div>
<input type="text" value="" id="txtNum" disabled="disabled" />
<asp:GridView ID="GridView1" runat="server" Width="622px" AutoGenerateColumns="False">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox ID="CheckBox1" runat="server" onclick="javascript:CheckNum(this);" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="recordId" HeaderText="recordId" />
<asp:BoundField DataField="username" HeaderText="username" />
</Columns>
</asp:GridView>
<input id="Button1" type="button" value="button" onclick="ChkCancle()" /></div>
<script type="text/javascript">
var num=0;
//获取一共有几条记录可选
var chkNum=document.getElementById("GridView1").getElementsByTagName("input").length;
//只允许选择5条
function CheckNum(mySelf)
{
var myId=mySelf.id;
if(document.getElementById(myId).Checked==true)
{
document.getElementById(myId).Checked=false;
num--;
}
else
{
document.getElementById(myId).Checked=true;
num++;
}
document.getElementById("txtNum").value=num;
if(num==5)
{
for(var i=0;i<chkNum;i++)
{
document.getElementById("GridView1").getElementsByTagName("input").item(i).disabled="disabled";
}
} }
//取消选择
function ChkCancle()
{
for(var i=0;i<chkNum;i++)
{
document.getElementById("GridView1").getElementsByTagName("input").item(i).disabled="";
}
}
</script>
</form>