怎么在点删除时弹出DataGrid的checkbox模板列有无选中的问题!就象点删除弹出对话框一样的!

loulanlouzhu 2003-12-05 11:10:04
我想在用户点删除按钮后先判断有无选中项!如果有则弹出"是否要删除该项"对话框,若无,则弹出"请选中您要删除的行"对话框!

感谢帮助!
...全文
41 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
webdiyer 2003-12-08
  • 打赏
  • 举报
回复
<%@Page debug=true%>
<%@Import Namespace="System.Data"%>
<%@Register TagPrefix="web" Assembly="AspNetPager" Namespace="Wuqi.Webdiyer"%>
<script Language="C#" runat="server">
void Page_Load(object src,EventArgs e){
if(!Page.IsPostBack){
BindData();
delbtn.Attributes.Add("onclick","return DeleteAlert()");
}
}

void BindData(){
DataTable table=new DataTable();
table.Columns.Add(new DataColumn("编号",typeof(int)));
table.Columns.Add(new DataColumn("姓名",typeof(string)));
table.Columns.Add(new DataColumn("年龄",typeof(int)));
table.Columns.Add(new DataColumn("生日",typeof(DateTime)));
DataRow row;
for(int i=0;i<8;i++){
row=table.NewRow();
row["编号"]=i;
row["姓名"]="Person_"+i.ToString();
row["年龄"]=i+20;
row["生日"]=new DateTime(1979,12,i+1);
table.Rows.Add(row);
}
grid1.DataSource=table;
grid1.DataBind();
}

void DeleteItems(object src,EventArgs e){
string idstr="您要删除的项是:";
foreach(DataGridItem item in grid1.Items){
CheckBox box=(CheckBox)item.FindControl("ckbox");
if(box!=null&&box.Checked){
idstr+=grid1.DataKeys[item.ItemIndex].ToString()+",";
}
}
lbl.Text=idstr;
}
</script>
<html>
<HEAD>
<TITLE> Webdiyer 制造:) (www.webdiyer.com) </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="Webdiyer">
<SCRIPT LANGUAGE="JavaScript">
<!--
function DeleteAlert(){
var dom=document.all;
var n=0;
for(var i=0;i<dom.length;i++){
var el=dom[i];
if(el.tagName=="INPUT"&&el.id.indexOf("ckbox")>=0&&el.type.toUpperCase()=="CHECKBOX"&&el.checked){
n++;
}
}
if(n>0)
return confirm("确实要删除这"+n+"项吗?");
else{
alert("请选择要删除的项!");
return false;
}
}
//-->
</SCRIPT>
</HEAD><body>
<form runat="server">
<asp:DataGrid runat="server" id="grid1" width="760px" AutogenerateColumns=false DataKeyField="编号">
<Columns>
<asp:BoundColumn DataField="姓名" ItemStyle-Width="30%" HeaderText="姓名"/>
<asp:BoundColumn DataField="年龄" ItemStyle-Width="30%" HeaderText="年龄"/>
<asp:BoundColumn DataField="生日" ItemStyle-Width="30%" HeaderText="生日"/>
<asp:TemplateColumn HeaderText="选定" ItemStyle-Width="10%">
<ItemTemplate>
<asp:CheckBox runat="server" id="ckbox"/>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
<asp:Button onclick="DeleteItems" runat="server" id="delbtn" Text="删除"/>
<p><asp:Label runat="server" id="lbl"/>
</form>
</body></html>
houjianxun 2003-12-08
  • 打赏
  • 举报
回复
那你就再加一个TextBox

如下:

<asp:textbox id="ID" runat="server" Width="0px" ReadOnly="True"></asp:textbox>


button.Attribute.Add("onclick","javascript:var count=0;var obj = document.getElementsByName(\"id\");for (var i=0;i<obj.length;i++){if(obj[i].checked){count++;}}if(count<1){alert('没有选中项');return false;}var str='(';for (var i=0;i<obj.length;i++){if(obj[i].checked){str += obj[i].value + ',';}}str = str.substring(0,str.lastIndexOf(',')) + ')';document.all.item('ID').value=str");


//-----------------
此处ID为服务器控件,得到的是复选框选中的ID集得,例如:(1,2,4,6)
操作删除时可以这样写Sql语句

"Delete From Note Where ID in "+ID.Text.Trim()
//Delete From Note Where ID in (1,2,4,6)
loulanlouzhu 2003-12-08
  • 打赏
  • 举报
回复
houjianxun(三千弱水)(独取一瓢清泉) :

按照你所说的,可以弹出该对话框了!但是无法实现我的删除功能了!!

private void SDGrid_DeleteCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
System.Web.UI.WebControls.CheckBox chk;
for (int i = 0; i < SDGrid.Items.Count; i++)
{
chk = (CheckBox)SDGrid.Items[i].FindControl("FaceCodeCK");
if (chk.Checked) //删除时有错误!“未将对象引用到实例!”
{
DD_MineGasInfoData.DeleteMineGasInfo(Convert.ToDateTime(e.Item.Cells[1].Text),Convert.ToInt32(e.Item.Cells[2].Text));
}
}
SDGridBind();
}

请问有没有好的解决办法!
loulanlouzhu 2003-12-05
  • 打赏
  • 举报
回复
瞧瞧!


===弯弯的月亮小小的船,小小的船,两头尖,我在小小的船里坐,只看见闪闪
的星星蓝蓝的天.
===本贴子以“现状”提供且没有任何担保,同时也没有授予任何权利
===我的blog:http://loulanlouzhu.blogone.net
gshope 2003-12-05
  • 打赏
  • 举报
回复
在DataGri1_ItemCommand事件里:
CheckBox ch=new CheckBox();
ch=e.Item.FindControl("CheckBox1");
if(ch.Checked==true)
弹窗口
else
.....
beyondfirst 2003-12-05
  • 打赏
  • 举报
回复
节贴吧
beyondfirst 2003-12-05
  • 打赏
  • 举报
回复
写在DataGrid的OnItemDataBound事件里,就是说在OnItemDataBound事件中作判断,然后确定弹出什么Box
zsww 2003-12-05
  • 打赏
  • 举报
回复
先建个模板列 模板列里放checkbox控件

然后用
CheckBox ch=(CheckBox)e.Item.FindControl("CheckBoxID");

然后判断
if(ch.Checked==true)
{
...
}
else
{
...
}


-----------努力学习 不断实践 虚心讨教---------
fushuming 2003-12-05
  • 打赏
  • 举报
回复
int j=0;
for(int i=0;i<this.DataGrid1.Items.Count;i++)
{
CheckBox chk=(CheckBox)this.DataGrid1.Items[i].FindControl("CheckBoxID");
if(chk.Checked==true)
{
j=1;
break;
}
}
if(j==0)
{
this.Response.Write("<script>window.alert('请选中您要删除的行')</script>");
}
else
{
this.Response.Write("<script>window.alert('是否要删除该项')</script>");
}
houjianxun 2003-12-05
  • 打赏
  • 举报
回复
checkbox 设置成模板列

可以用html的代替,<input type=checkbox name=id value='+ 绑定的值 +'>



button.Attribute.Add("onclick","javascript:var count=0;var obj = document.getElementsByName("id");for (var i=0;i<obj.length;i++){if(obj[i].checked){count++;}}if(count<1){alert('没有选中项');return false;}");
xiandaliu 2003-12-05
  • 打赏
  • 举报
回复
Attributes
xiandaliu 2003-12-05
  • 打赏
  • 举报
回复
我建议直接做一个按钮在页面上,然后在DataGrid中用模板列做CheckBox这样可以同时删除选中的多条记录,这个是大家的普遍做法了吧,不用在DataGrid中加什么按钮触发什么事件了
Page_load( object obj,EventArgs e )
if( !IsPostBack )
button.Attribute.Add("onclick","javascript:return getSelectIndex();");
openid 2003-12-05
  • 打赏
  • 举报
回复
尽管你是用模板列设定的删除Button或是Linkbutton,在前台页面上,你一定可以看到这个控件的标识:
在<asp:DataGrid>
<columns>
;;;;;
<asp:button...>
你把这个button夹在手动写入的<span >中(上面写过了)

就可以了

另外建议不要使用模板列,这种做法不够灵活
xydyh 2003-12-05
  • 打赏
  • 举报
回复
结合以上各位的观点可知:
在DataGri1_ItemCommand事件里:

CheckBox ch=new CheckBox();
ch=e.Item.FindControl("CheckBox1");

linkbutton link1=new linkbutton();
link1=e.item.findcontrol(linkbutton1);

if(ch.Checked==true)
link1.Attributes.Add("onclick", "return confirm('q确定要删除吗?')");
else
.....

每次选中CheckBox时先重新绑定一次!
openid 2003-12-05
  • 打赏
  • 举报
回复
向您请教:

如何让控件TextBox具备根据客户输入内容的长度自动换行?
又如何能在客户敲入回车的时候强制换行?
有现成的属性吗?还是需要另外写入代码?

客户在页面敲入回车,有时会自动自行某个页面控件的OnClick内容,如何关闭?有时需要在客户敲入回车的时候默认执行这个控件的点击事件,怎么做?

Tab敲入的时候,怎么控制页面各个控件的激活次序?

多谢了
loulanlouzhu 2003-12-05
  • 打赏
  • 举报
回复
我是通过datagrid的模板列删除的!该怎么写才能执行那个脚本!?


===弯弯的月亮小小的船,小小的船,两头尖,我在小小的船里坐,只看见闪闪
的星星蓝蓝的天.
===本贴子以“现状”提供且没有任何担保,同时也没有授予任何权利
===我的blog:http://loulanlouzhu.blogone.net
openid 2003-12-05
  • 打赏
  • 举报
回复
这样可以解决:
把"删除"button放在一个<span></span>内

<span onClick="javascript:return confirm('q确定要删除吗?')">
<asp:button id="delete"></asp:button>
</span>

zhi执行的时候如果选择"确定",就执行button的内容,否则回到原来的页面
xiandaliu 2003-12-05
  • 打赏
  • 举报
回复
valuecolumnindex 是我想获得的DataGrid的某行(checkbox.checked==true)某列的值,那这个是列的index
点击删除按钮触发,但是它的返回值是数组,所以你应该在
if( count==0 )
alert("请选择所要删除的记录!");
后面加
if( count==0 )
{
alert("请选择所要删除的记录!");
return false;
}
loulanlouzhu 2003-12-05
  • 打赏
  • 举报
回复
有几个问题:

1: valuecolumnindex -->>这个指什么!?是checkbox在datagrid中的列的索引吗!?比如第0列?
2: 怎么触发做个脚本方法!?



===弯弯的月亮小小的船,小小的船,两头尖,我在小小的船里坐,只看见闪闪
的星星蓝蓝的天.
===本贴子以“现状”提供且没有任何担保,同时也没有授予任何权利
===我的blog:http://loulanlouzhu.blogone.net
loulanlouzhu 2003-12-05
  • 打赏
  • 举报
回复
谢谢楼上支持!我试试!


===弯弯的月亮小小的船,小小的船,两头尖,我在小小的船里坐,只看见闪闪
的星星蓝蓝的天.
===本贴子以“现状”提供且没有任何担保,同时也没有授予任何权利
===我的blog:http://loulanlouzhu.blogone.net
加载更多回复(3)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧