关于checkbox取值的老问题,我弄了两天加一个通宵就是搞不定,大家帮帮忙,来看看

时间:2022-04-03 19:22:59
想在DataGrid1中做个checkbox的批量删除,通过按钮把选中的纪录删除。
如果有人能给我一段代码直接运行成功最好。
我已经精疲力竭了,马上就是我的连续第56个小时没睡觉了,我不相信我就弄不出来。
帮忙。。。。吧,不要看到我倒下。。。

代码如下:
aspx:

        <asp:datagrid id="DataGrid1" runat="server" DataKeyField="n_id" AutoGenerateColumns="False" Height="120px" Width="575px">
<Columns> <asp:TemplateColumn HeaderText="求职信息:"> <ItemTemplate>
        <input id="sel" name="sel" type="checkbox" runat="server" value=<%#Eval("n_id")%>/>
       <a href='edit.aspx?id=<%#Eval("n_id")%>' target=_blank>编辑</a>·<a href='view.aspx?id=<%#Eval("n_id")%>' target=_blank><%#Eval("n_title")%></a>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:datagrid> 

后台cs:
      
         protected void Page_Load(object sender, System.EventArgs e)
        {
            ds = Socut.Data.ExecuteDataSet("SELECT * FROM socut_news", "TableName");
            DataGrid1.DataSource = ds;//设置数据源            
            DataGrid1.DataBind();//绑定数据           
        }

        protected void Button1_OnClick(object sender, EventArgs e)
        {
            for (int i = 0; i < DataGrid1.Items.Count; i++)
            {
                HtmlInputCheckBox mychk = (HtmlInputCheckBox)DataGrid1.Items[i].FindControl("sel");
                if (mychk.Checked == true)
                {
                    string myid = Request["sel"];
                    Socut.Data.ExecuteDataSet("DELETE FROM socut_news WHERE n_id='" + myid + "'");
                }
            } 
        }



现在情况就是一直按按钮没有反应,我之前设置过label测试,request的取值其实是没有问题的,
问题应该是在查找sel值的地方,可能一直没找到。
不然应该不会按按钮没反应。

大侠们帮帮忙。我忙活了好几天了,弄死人。就这么个小问题,我不知道我到底是哪里错了。
谢谢

44 个解决方案

#1


 n_id='" + myid + "'");
id如果是int不需要加'',否则会错的

#2


try:

 foreach (GridViewRow row in DataGrid1.Rows)
{
CheckBox flag = row.Cells[x].FindControl("sel") as CheckBox;
if (flag != null && flag.Checked)
{
.....
}

x 是你checkbox 在地几个cell里(0 based)

________________________________________________
mintsilk
mintsilk@ziplecture.com
Ziplecture.com -- free online training

#3


打个断点跟踪下吧 看看控件有没取到额!

#4


用datalist,id为list_id
在ItemTemplate添加一个隐藏的html控件input,<input type="hidden" id="SelectedID" runat="server" value='<%#Eval("n_id")%>' />,再添加一个服务器控件<asp:checkbox id="X_Z" runat="server" />
再在datalist外添加一个button服务器控件,在cs后台添加该button事件:
string dgIDs = "";
bool BxsChkd = false;
foreach (DataListItem y in list_id.Items)
{
     if (((CheckBox)y.FindControl("X_Z")).Checked)
     {
         BxsChkd = true;
         dgIDs += ((HtmlInputHidden)y.FindControl("SelectedID")).Value.ToString() + ",";
     }
     if (dgIDs.Length.ToString() != "0")
     {
         //执行删除操作
          //注意:在写sql删除语言时,("delete from 数据表 where n_id in (" + dgIDs.Substring(0, dgIDs.LastIndexOf(",")) + ")")
     }
     else
     {
         //弹出没有选择项的对话框
     }
}

#5


==这个是代码页: 
protected void chkAll_CheckedChanged(object sender, EventArgs e)
    { //全选
        //sender为事件源,它是CheckBox所以可以强制转成CheckBox.
        CheckBox cball=(CheckBox)sender;//cball就为全选CheckBox
        if (cball.Checked == true)
        {//全选CheckBox被选中,用foreach遍历GridView中的所有行
            foreach (GridViewRow gvr in this.GridView1.Rows)
           {//gvr对象每循环一次代表一行,从第0行开始.
            //Cells[8]表示第8个单元格.
            //在GridView中的所有行的第8个单元格中用FindControl()方法通过控件的ID查找控件,找到控件后强制转换成它原来的类型。
           CheckBox cbone=(CheckBox)gvr.Cells[8].FindControl("chkOne");
           cbone.Checked = true;
            }
        }
        else
        {//全选没被选中
            foreach (GridViewRow gvr in this.GridView1.Rows)
            {
         CheckBox cbone = (CheckBox)gvr.Cells[8].FindControl("chkOne");
            cbone.Checked = false;
            }

        }
    }
    protected void Button3_Click(object sender, EventArgs e)
    {//删除被选中的项:
        foreach (GridViewRow gvr in this.GridView1.Rows)
        {
            CheckBox cbone = (CheckBox)gvr.Cells[8].FindControl("chkOne");
            if (cbone.Checked) //如果当前行的CheckBox被选中
            {//删除
                //要删除必定会有一删除的条件
                string id = gvr.Cells[1].Text;
                SqlConnection conn = new SqlConnection("server=.;database=northwind;uid=sa;pwd=;");
                string sqlStr = "delete employees where employeeid=@id";
                SqlCommand cmd = new SqlCommand(sqlStr,conn);
                cmd.Parameters.Add("@id",SqlDbType.Int,4);
                cmd.Parameters["@id"].Value = id;

                conn.Open();
                cmd.ExecuteNonQuery();
                conn.Close();                             

                //重新绑定
                this.DataBind();               

            }
        }


Html页
<asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True"
            AutoGenerateColumns="False" BackColor="White" BorderColor="#CC9966" BorderStyle="None"
            BorderWidth="1px" CellPadding="4" DataSourceID="SqlDataSource1" OnRowCreated="GridView1_RowCreated">
            <FooterStyle BackColor="#FFFFCC" ForeColor="#330099" />
            <RowStyle BackColor="White" ForeColor="#330099" />
            <SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="#663399" />
            <PagerStyle BackColor="#FFFFCC" ForeColor="#330099" HorizontalAlign="Center" />
            <HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="#FFFFCC" />
            <Columns>
                <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" ShowSelectButton="True" />
                <asp:BoundField DataField="EmployeeID" HeaderText="EmployeeID" InsertVisible="False"
                    ReadOnly="True" SortExpression="EmployeeID" />
                <asp:BoundField DataField="LastName" HeaderText="LastName" SortExpression="LastName" />
                <asp:BoundField DataField="FirstName" HeaderText="FirstName" SortExpression="FirstName" />
                <asp:BoundField DataField="Title" HeaderText="Title" SortExpression="Title" />
                <asp:BoundField DataField="City" HeaderText="City" SortExpression="City" />
                <asp:BoundField DataField="HireDate" DataFormatString="{0:d}" HeaderText="HireDate"
                    HtmlEncode="False" SortExpression="HireDate" />
                <asp:ImageField DataImageUrlField="LastName" DataImageUrlFormatString="images/{0}"
                    HeaderText="权限">
                </asp:ImageField>
                <asp:TemplateField>
                    <HeaderTemplate>
                        <asp:CheckBox ID="chkAll" runat="server" AutoPostBack="True" Font-Bold="True" Font-Size="9pt"
                            ForeColor="White" OnCheckedChanged="chkAll_CheckedChanged" Text="全选" />
                    </HeaderTemplate>
                    <ItemTemplate>
                        <asp:CheckBox ID="chkOne" runat="server" Text="选择" />
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>

#6


我的这个是在05里面实现的简单的很

#7


精神可佳, 顶一个

Request.Form[Name]

#8


可怜的楼主,你为什么忘记page_load里增加if(!ispostpack)

   protected void Page_Load(object sender, System.EventArgs e)
        {
if(!ispostpack) //为什么忘记加他
            ds = Socut.Data.ExecuteDataSet("SELECT * FROM socut_news", "TableName");
            DataGrid1.DataSource = ds;//设置数据源            
            DataGrid1.DataBind();//绑定数据           
        }

#9


可爱的楼主,要学会调试啊!
解决方案,如楼上所述!
为什么呢,请看如下:
每次你刷新一次页面首先它不是与postback机理相同,他是与你在刷新前一个页面的操作是一致的,比如,你是第一次载入页面的话,如果刷新页面那么在!ispostback中的程序在刷新会在执行一遍.如果你是在第二次或更多刷新页面,那么刷新页面后执行的就不会是!Ispostback,而是ispostback中的程序,并且会执行在上次页面刷新你进行的操作。
其实.NET页面加载时先调用Init事件,初始化页面,然后再触发LOAD事件,而Page_Load只是一个方法,在LOAD事件触发时调用了这个方法.
至于控件,在页面加载时也是先调用Init事件,并调用Init(方法)进行初始化,然后再触发LOAD事件加载.

#10


引用 1 楼 fengqiwuyue 的回复:
n_id='" + myid + "'");
id如果是int不需要加'',否则会错的


是string的

#11


引用 4 楼 sohohu 的回复:
用datalist,id为list_id
在ItemTemplate添加一个隐藏的html控件input, <input type="hidden" id="SelectedID" runat="server" value=' <%#Eval("n_id")%>' />,再添加一个服务器控件 <asp:checkbox id="X_Z" runat="server" />
再在datalist外添加一个button服务器控件,在cs后台添加该button事件:
string dgIDs = "";
bool BxsChkd = false;
foreach (DataListItem y in list_id.Items)
{
if (((CheckBox)y.FindControl…


我现在只能用datagrid。。不能改datalist
否则没办法弄下去。

#12


引用 8 楼 youaskme 的回复:
可怜的楼主,你为什么忘记page_load里增加if(!ispostpack)

protected void Page_Load(object sender, System.EventArgs e)
{
if(!ispostpack) //为什么忘记加他
ds = Socut.Data.ExecuteDataSet("SELECT * FROM socut_news", "TableName");
DataGrid1.DataSource = ds;//设置数据源
DataGrid1.DataBind();//绑定数据
}



哦???难道我????
试试先。

#13


  function SelectAll(frm)
  {
    for (var i=0;i<frm.elements.length;i++)
      frm.elements[i].checked = frm.selectall.checked;
  }
  
function CheckSelect(frm)
{
var col=frm.elements;
var obj=frm.selectall;
var intEls=0,intChks=0;
for(var i=0;i<col.length;i++)
{
if(col[i].type=="checkbox"&&col[i].name!="selectall")
{
intEls++;
if(col[i].checked)
intChks++;
}
}
obj.checked=(intEls==intChks);
}

<asp:datagrid id="DataGrid1" runat="server" Width="100%" AllowPaging="True" PageSize="15" AutoGenerateColumns="False">
<SelectedItemStyle CssClass="SelectedItemback"></SelectedItemStyle>
<AlternatingItemStyle CssClass="Alternatingback"></AlternatingItemStyle>
<ItemStyle CssClass="griditem"></ItemStyle>
<HeaderStyle CssClass="gridheader"></HeaderStyle>
<Columns>
<asp:BoundColumn Visible="False" DataField="ZT" HeaderText="状态"></asp:BoundColumn>
<asp:TemplateColumn HeaderText="&lt;input type=checkbox name='selectall' onClick='SelectAll(document.Form1)'&gt;全选">
<HeaderStyle Font-Bold="True" HorizontalAlign="Center" Width="8%"></HeaderStyle>
<ItemTemplate>
<asp:CheckBox id="CheckBox1" runat="server"></asp:CheckBox>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
<PagerStyle Visible="False"></PagerStyle>
</asp:datagrid>


private void But_Del_Click(object sender, System.EventArgs e)
{
string XTBH="",BH="";
foreach(DataGridItem item in  DataGrid1.Items)
{
if(((CheckBox)item.FindControl("CheckBox1")).Checked)
{
XTBH+=item.Cells[2].Text.ToString().Trim()+",";
}
}
if(XTBH.Length==0)
{
this.Response.Write("<script language='javascript'>alert('请选择要操作的数据')</script>");
return;
}
XTBH=XTBH.Substring(0,XTBH.Length-1);
BH="in ("+XTBH+")";
 Socut.Data.ExecuteDataSet("DELETE FROM socut_news WHERE n_id in '" + BH+ "'");

//删除数据
                         // 绑定数据
}

#14


回八楼。。没用哦
加了还是按钮没反应。

我觉得还是取值的问题。取不到。

#15


帮顶

#18


谢谢楼上的
但是我看了半天,看不出有什么联系?

谁能明确指出我的代码里面的问题吗?
我觉得我这样比较写的简洁了,不想再复杂化。

#19


楼主注意身体哈,先顶

#20


应该是个很简单的问题,建议楼主将整个页面的代码(cs,xhtml)都帖出来,让大家给你测试一下,相信很快就ok

#21


要加上 if(!ispostback) ,如果取不到.可以设置断点高度下


__________
QQ:3761290

#22


        protected void Button1_OnClick(object sender, EventArgs e)
        {
            for (int i = 0; i < DataGrid1.Items.Count; i++)
            {
                HtmlInputCheckBox mychk = (HtmlInputCheckBox)DataGrid1.Items[i].FindControl("sel");
                if (mychk.Checked == true)
                {
                    string myid = mychk.value; //修改了
                    Socut.Data.ExecuteDataSet("DELETE FROM socut_news WHERE n_id='" + myid + "'");
                }
            } 
        }

#23


在Access数据库里主键不需要加“,但在SQL里可以加,也可以不加。

#24


引用 20 楼 LikeCode 的回复:
应该是个很简单的问题,建议楼主将整个页面的代码(cs,xhtml)都帖出来,让大家给你测试一下,相信很快就ok

好的,我都贴,我自己也是弄的测试页面。
环境:xp professional sp3。vs2005。.net2.0.iis5.1。sql2000



<%@ Page language="c#" Inherits="Show_Socut_Data.News.Manage" CodeFile="Manage.aspx.cs" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>Manage</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
<script language="javascript">
        function checkAll()
        {            
            var frm=document.Form1 ;
              
            for(var i=0;i<frm.elements.length;i++)
            {
            
                var e=frm.elements[i];
                
                if(e.name!="allbox" && e.type=="checkbox") //仅对datagrid <itemTemplate>中的checkbox执行操作
                {
                    var eName= e.name.split(':');
                    if(eName[0]=="DataGrid1")
                    {
                        e.checked=frm.allbox.checked;
                    }                    
                }
            }                   
        }        
        </script>
</HEAD>
<body>
<form id="Form1" method="post" runat="server">
<table cellSpacing="1" cellPadding="5" width="780" align="center" bgColor="#cccccc" border="0">
<tr>
<td align="center" width="788" bgColor="#ffffff" height="150">网站顶部</td>
</tr>
</table>
<table cellSpacing="1" cellPadding="5" width="780" align="center" bgColor="#cccccc" border="0">
<tr bgColor="#ffffff">
<td width="180" height="200">用户登陆</td>
<td vAlign="top" rowSpan="2">
<asp:datagrid id="DataGrid1" runat="server" DataKeyField="n_id" AutoGenerateColumns="False" Height="120px" Width="575px">
<Columns>
<asp:TemplateColumn HeaderText="求职信息:">
<ItemTemplate>
                                       <input id="sel" name="sel" type="checkbox" runat="server" value=<%#Eval("n_id")%>/>
                                            <a href='edit.aspx?id=<%#Eval("n_id")%>' target=_blank>
编辑</a>·<a href='view.aspx?id=<%#Eval("n_id")%>' target=_blank><%#Eval("n_title")%></a>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:datagrid> 
<input type="checkbox" name="allbox" onclick="javascript:checkAll();">
                           <asp:Button ID="Button1" runat="server" OnClick="Button1_OnClick" Text="Delete Selected"
                            Width="174px" /></td>
</tr>
<tr bgColor="#ffffff">
<td height="200">文章统计</td>
</tr>
</table>
<table cellSpacing="1" cellPadding="5" width="780" align="center" bgColor="#cccccc" border="0">
<tr>
<td align="center" width="788" bgColor="#ffffff" height="150">
                        网站底部</td>
</tr>
</table>
</form>
</body>
</HTML>

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;


namespace Show_Socut_Data.News
{
    /// <summary>
    /// Manage 的摘要说明。
    /// </summary>
    public partial class Manage : System.Web.UI.Page
    {

        public DataSet ds = new DataSet();//将DataSet实例化
        

        protected void Page_Load(object sender, System.EventArgs e)
        {
            if (!IsPostBack)
            {
                ds = Socut.Data.ExecuteDataSet("SELECT * FROM socut_news", "TableName");
                DataGrid1.DataSource = ds;//设置数据源            
                DataGrid1.DataBind();//绑定数据
            }
            
        }


        #region Web 窗体设计器生成的代码
        override protected void OnInit(EventArgs e)
        {
            //
            // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
            //
            InitializeComponent();
            base.OnInit(e);
        }

        /// <summary>
        /// 设计器支持所需的方法 - 不要使用代码编辑器修改
        /// 此方法的内容。
        /// </summary>
        private void InitializeComponent()
        {

        }
        #endregion


        protected void Button1_OnClick(object sender, EventArgs e)
        {
            int mycount = DataGrid1.Items.Count;
            for (int i = 0; i < mycount; i++)
            {
                HtmlInputCheckBox mychk = (HtmlInputCheckBox)DataGrid1.Items[i].FindControl("sel");
                if (mychk.Checked == true)
                {
                    string myid = Request["sel"];
                    Socut.Data.ExecuteDataSet("DELETE FROM socut_news WHERE n_id='" + myid + "'");
                }
            } 
        }
   }
}

#25


我用了一个数据库组件
socut.data.dll3.1

#26


引用 22 楼 ycyangcai 的回复:
protected void Button1_OnClick(object sender, EventArgs e)
{
for (int i = 0; i  < DataGrid1.Items.Count; i++)
{
HtmlInputCheckBox mychk = (HtmlInputCheckBox)DataGrid1.Items[i].FindControl("sel");
if (mychk.Checked == true)
{
string myid = mychk.value; //修改了
Socut.Data.ExecuteDataSet("DELETE FROM socut_news WHERE n_id='" + myid + "'");
}
}
}

测试了没有用。
mychk是定义的Htmlinputcheckbox的值,只有true或者false。不可能行得通
即使换成了sel.value也不行。
报错提示:上下文没有sel的定义

#27


因为input不是服务器控件,回调过后他的状态是不会得以保存的,你可以把它换成asp:CheckBox或者在input中
加上enableviewstate:
<input id="sel"  enableviewstate="true" name="sel" type="checkbox" runat="server" value='<%#Eval("n_id")%>' />

#28


另外,你既然已经使它runat="server"了,就不能再用Request["sel"]来获取它的Value了,直接用
string myid = mychk.Value;即可

#29


引用 29 楼 ojlovecd 的回复:
另外,你既然已经使它runat="server"了,就不能再用Request["sel"]来获取它的Value了,直接用 
string myid = mychk.Value;即可

……LZ的上一个帖子里我回复了,当时在网吧,手打代码,mychk.value,如果LZ是直接复制的话实在是抱歉了……

#30


引用 30 楼 belldandy11 的回复:
引用 29 楼 ojlovecd 的回复:
另外,你既然已经使它runat="server"了,就不能再用Request["sel"]来获取它的Value了,直接用
string myid = mychk.Value;即可

……LZ的上一个帖子里我回复了,当时在网吧,手打代码,mychk.value,如果LZ是直接复制的话实在是抱歉了……


您的意思是??v不要大写还是???
另外mychk没有value属性。
应该是sel吧?
对不对?

#31


引用 31 楼 nickandjayzhou 的回复:
引用 30 楼 belldandy11 的回复:
引用 29 楼 ojlovecd 的回复:
另外,你既然已经使它runat="server"了,就不能再用Request["sel"]来获取它的Value了,直接用
string myid = mychk.Value;即可

……LZ的上一个帖子里我回复了,当时在网吧,手打代码,mychk.value,如果LZ是直接复制的话实在是抱歉了……


您的意思是??v不要大写还是???
另外mychk没有value属性。
应该是sel吧?
对不对?

HtmlInputCheckBox 类型怎么可能没有Value属性 关于checkbox取值的老问题,我弄了两天加一个通宵就是搞不定,大家帮帮忙,来看看

#32


坚持住!我有过你类似的经历,最后一定可以搞定!

#33


引用 1 楼 fengqiwuyue 的回复:
n_id='" + myid + "'"); 
id如果是int不需要加'',否则会错的


PS: 
我的目标是 ---->  关于checkbox取值的老问题,我弄了两天加一个通宵就是搞不定,大家帮帮忙,来看看关于checkbox取值的老问题,我弄了两天加一个通宵就是搞不定,大家帮帮忙,来看看关于checkbox取值的老问题,我弄了两天加一个通宵就是搞不定,大家帮帮忙,来看看关于checkbox取值的老问题,我弄了两天加一个通宵就是搞不定,大家帮帮忙,来看看关于checkbox取值的老问题,我弄了两天加一个通宵就是搞不定,大家帮帮忙,来看看关于checkbox取值的老问题,我弄了两天加一个通宵就是搞不定,大家帮帮忙,来看看

^_^

#34



这里是删除按钮代码:
System.Web.UI.WebControls.CheckBox chk;
        int all = this.DLJobList.Items.Count;
        for (int i = 0; i < all; i++)
        {
            chk = (CheckBox)(this.DLJobList.Items[i].FindControl("chkExport"));
            if (chk.Checked == true)
            {
                j++;
            }
        }
        if (j == 0)
        {
            this.ClientScript.RegisterClientScriptBlock(this.GetType(), "a", "alert('请选择要操作的项!');", true);
            return;
        }
        else
        {
            try
            {
                for (int i = 0; i < all; i++)
                {
                    chk = (CheckBox)(this.DLJobList.Items[i].FindControl("chkExport"));
                    if (chk.Checked == true)
                    {
                        int JobID = Convert.ToInt32(this.DLJobList.DataKeys[this.DLJobList.Items[i].ItemIndex]);
                        myjob.DelQq_Job(JobID);
                    }
                }
                LoadJobList(ViewState["strsql"].ToString());
            }
            catch (Exception ex)
            {
                this.ClientScript.RegisterClientScriptBlock(this.GetType(), "a", "alert('操作失败!数据库维护中!');", true);
                return;
            }
        }
以上功能可以用的,我一直在这样用的

#35


引用 32 楼 ojlovecd 的回复:
引用 31 楼 nickandjayzhou 的回复:
引用 30 楼 belldandy11 的回复:
引用 29 楼 ojlovecd 的回复:
另外,你既然已经使它runat="server"了,就不能再用Request["sel"]来获取它的Value了,直接用
string myid = mychk.Value;即可

……LZ的上一个帖子里我回复了,当时在网吧,手打代码,mychk.value,如果LZ是直接复制的话实在是抱歉了……


您的意思是??v不要大写还是???
另外mychk没有value属性。
应该是sel吧…


但是strID提取的是我的u_id。
mychk是个bool型,只是中间用来测试的吧
我提取他的值有什么用呢

#36


引用 35 楼 jrl5365 的回复:
这里是删除按钮代码:
System.Web.UI.WebControls.CheckBox chk;
int all = this.DLJobList.Items.Count;
for (int i = 0; i  < all; i++)
{
chk = (CheckBox)(this.DLJobList.Items[i].FindControl("chkExport"));
if (chk.Checked == true)
{
j++;
}
}
if (j == 0)
{
this.ClientScript.RegisterClientScriptBlock(this.GetType(), "a", "alert('请选择要操作的项!');", true);
return;
}
else
{
try
{


貌似太复杂了,我也测试了,不大有作用,很多小地方出错。
我这里就想大家帮忙找下我代码的错误。。

#37


首先楼主设断点看看你后台的代码取值是多少,取没取到值


楼主这里定义了  <input id="sel" name="sel" type="checkbox" runat="server" value=<%#Eval("n_id")%>/>

31楼你说取mychk.Value 是true 或false  真是这样的话 value=<%#Eval("n_id")%>就没意义了

这样的话你试试在它后面加个hidden 

<INPUT id="txtN_id" type="hidden" value=<%#Eval("n_id")%> name="Hidden1" runat="server">

然后在后台代码取txtN_id 的value

#38


简单说一下思路:

取值操作可以交给客户端js来处理,再将所有选中checkbox的值用一个分割符拼接起来 如: 1,2,3 再把这个串交给带runat=server 的隐藏域,后台在触发"批量删除"按钮操作时,直接取该隐藏域的值就可以了

#39


        for (int i = 0; i < mycount; i++)
        {
            //HtmlInputCheckBox mychk = (HtmlInputCheckBox)DataGrid1.Items[i].FindControl("Checkbox1");
            HtmlInputCheckBox mychk = (HtmlInputCheckBox)GridView1.Rows[i].FindControl("Checkbox1");
            if (mychk.Checked == true)
            {
                string myid = mychk.Value;
                //Socut.Data.ExecuteDataSet("DELETE FROM socut_news WHERE n_id='" + myid + "'");
                Response.Write(myid);
            }
        } 


可以^0^

#40


引用 36 楼 nickandjayzhou 的回复:
但是strID提取的是我的u_id。
mychk是个bool型,只是中间用来测试的吧
我提取他的值有什么用呢

strID是什么?哪来的?你24楼的代码哪有这东西?
你24楼代码这么定义
HtmlInputCheckBox mychk = (HtmlInputCheckBox)DataGrid1.Items[i].FindControl("sel");
那么mychk又怎么会是bool型?
你的思维很混乱

#41


谢谢楼上所有朋友。
可能这几天没休息好,搞的我脑溢血常识都不知道了。
mychk.checked是bool值。mychk的value是有的。
哎呀,会过来一看,原来是这么简单的问题。
我还在request【“sel”】

现在解决了,谢谢所有提过建议的朋友们。
我解决的最后关键就是request没用。
改用mychk.value,然后!ispostback不能丢了。

再次在此谢谢各位了~!!!

#42


引用 41 楼 ojlovecd 的回复:
引用 36 楼 nickandjayzhou 的回复:
但是strID提取的是我的u_id。
mychk是个bool型,只是中间用来测试的吧
我提取他的值有什么用呢

strID是什么?哪来的?你24楼的代码哪有这东西?
你24楼代码这么定义
HtmlInputCheckBox mychk = (HtmlInputCheckBox)DataGrid1.Items[i].FindControl("sel");
那么mychk又怎么会是bool型?
你的思维很混乱


对不起对不起
谢谢你的帮助。
我太久没睡觉了,所以有些搞不清了。谢谢你。

#43


总算能踏实安心睡个好觉了。。。。

55555555

#44


LZ可以用服务器端控件。
应该可以搞定,我做过用户管理在gridview里加checkbox后台遍历gridview每行。

#1


 n_id='" + myid + "'");
id如果是int不需要加'',否则会错的

#2


try:

 foreach (GridViewRow row in DataGrid1.Rows)
{
CheckBox flag = row.Cells[x].FindControl("sel") as CheckBox;
if (flag != null && flag.Checked)
{
.....
}

x 是你checkbox 在地几个cell里(0 based)

________________________________________________
mintsilk
mintsilk@ziplecture.com
Ziplecture.com -- free online training

#3


打个断点跟踪下吧 看看控件有没取到额!

#4


用datalist,id为list_id
在ItemTemplate添加一个隐藏的html控件input,<input type="hidden" id="SelectedID" runat="server" value='<%#Eval("n_id")%>' />,再添加一个服务器控件<asp:checkbox id="X_Z" runat="server" />
再在datalist外添加一个button服务器控件,在cs后台添加该button事件:
string dgIDs = "";
bool BxsChkd = false;
foreach (DataListItem y in list_id.Items)
{
     if (((CheckBox)y.FindControl("X_Z")).Checked)
     {
         BxsChkd = true;
         dgIDs += ((HtmlInputHidden)y.FindControl("SelectedID")).Value.ToString() + ",";
     }
     if (dgIDs.Length.ToString() != "0")
     {
         //执行删除操作
          //注意:在写sql删除语言时,("delete from 数据表 where n_id in (" + dgIDs.Substring(0, dgIDs.LastIndexOf(",")) + ")")
     }
     else
     {
         //弹出没有选择项的对话框
     }
}

#5


==这个是代码页: 
protected void chkAll_CheckedChanged(object sender, EventArgs e)
    { //全选
        //sender为事件源,它是CheckBox所以可以强制转成CheckBox.
        CheckBox cball=(CheckBox)sender;//cball就为全选CheckBox
        if (cball.Checked == true)
        {//全选CheckBox被选中,用foreach遍历GridView中的所有行
            foreach (GridViewRow gvr in this.GridView1.Rows)
           {//gvr对象每循环一次代表一行,从第0行开始.
            //Cells[8]表示第8个单元格.
            //在GridView中的所有行的第8个单元格中用FindControl()方法通过控件的ID查找控件,找到控件后强制转换成它原来的类型。
           CheckBox cbone=(CheckBox)gvr.Cells[8].FindControl("chkOne");
           cbone.Checked = true;
            }
        }
        else
        {//全选没被选中
            foreach (GridViewRow gvr in this.GridView1.Rows)
            {
         CheckBox cbone = (CheckBox)gvr.Cells[8].FindControl("chkOne");
            cbone.Checked = false;
            }

        }
    }
    protected void Button3_Click(object sender, EventArgs e)
    {//删除被选中的项:
        foreach (GridViewRow gvr in this.GridView1.Rows)
        {
            CheckBox cbone = (CheckBox)gvr.Cells[8].FindControl("chkOne");
            if (cbone.Checked) //如果当前行的CheckBox被选中
            {//删除
                //要删除必定会有一删除的条件
                string id = gvr.Cells[1].Text;
                SqlConnection conn = new SqlConnection("server=.;database=northwind;uid=sa;pwd=;");
                string sqlStr = "delete employees where employeeid=@id";
                SqlCommand cmd = new SqlCommand(sqlStr,conn);
                cmd.Parameters.Add("@id",SqlDbType.Int,4);
                cmd.Parameters["@id"].Value = id;

                conn.Open();
                cmd.ExecuteNonQuery();
                conn.Close();                             

                //重新绑定
                this.DataBind();               

            }
        }


Html页
<asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True"
            AutoGenerateColumns="False" BackColor="White" BorderColor="#CC9966" BorderStyle="None"
            BorderWidth="1px" CellPadding="4" DataSourceID="SqlDataSource1" OnRowCreated="GridView1_RowCreated">
            <FooterStyle BackColor="#FFFFCC" ForeColor="#330099" />
            <RowStyle BackColor="White" ForeColor="#330099" />
            <SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="#663399" />
            <PagerStyle BackColor="#FFFFCC" ForeColor="#330099" HorizontalAlign="Center" />
            <HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="#FFFFCC" />
            <Columns>
                <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" ShowSelectButton="True" />
                <asp:BoundField DataField="EmployeeID" HeaderText="EmployeeID" InsertVisible="False"
                    ReadOnly="True" SortExpression="EmployeeID" />
                <asp:BoundField DataField="LastName" HeaderText="LastName" SortExpression="LastName" />
                <asp:BoundField DataField="FirstName" HeaderText="FirstName" SortExpression="FirstName" />
                <asp:BoundField DataField="Title" HeaderText="Title" SortExpression="Title" />
                <asp:BoundField DataField="City" HeaderText="City" SortExpression="City" />
                <asp:BoundField DataField="HireDate" DataFormatString="{0:d}" HeaderText="HireDate"
                    HtmlEncode="False" SortExpression="HireDate" />
                <asp:ImageField DataImageUrlField="LastName" DataImageUrlFormatString="images/{0}"
                    HeaderText="权限">
                </asp:ImageField>
                <asp:TemplateField>
                    <HeaderTemplate>
                        <asp:CheckBox ID="chkAll" runat="server" AutoPostBack="True" Font-Bold="True" Font-Size="9pt"
                            ForeColor="White" OnCheckedChanged="chkAll_CheckedChanged" Text="全选" />
                    </HeaderTemplate>
                    <ItemTemplate>
                        <asp:CheckBox ID="chkOne" runat="server" Text="选择" />
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>

#6


我的这个是在05里面实现的简单的很

#7


精神可佳, 顶一个

Request.Form[Name]

#8


可怜的楼主,你为什么忘记page_load里增加if(!ispostpack)

   protected void Page_Load(object sender, System.EventArgs e)
        {
if(!ispostpack) //为什么忘记加他
            ds = Socut.Data.ExecuteDataSet("SELECT * FROM socut_news", "TableName");
            DataGrid1.DataSource = ds;//设置数据源            
            DataGrid1.DataBind();//绑定数据           
        }

#9


可爱的楼主,要学会调试啊!
解决方案,如楼上所述!
为什么呢,请看如下:
每次你刷新一次页面首先它不是与postback机理相同,他是与你在刷新前一个页面的操作是一致的,比如,你是第一次载入页面的话,如果刷新页面那么在!ispostback中的程序在刷新会在执行一遍.如果你是在第二次或更多刷新页面,那么刷新页面后执行的就不会是!Ispostback,而是ispostback中的程序,并且会执行在上次页面刷新你进行的操作。
其实.NET页面加载时先调用Init事件,初始化页面,然后再触发LOAD事件,而Page_Load只是一个方法,在LOAD事件触发时调用了这个方法.
至于控件,在页面加载时也是先调用Init事件,并调用Init(方法)进行初始化,然后再触发LOAD事件加载.

#10


引用 1 楼 fengqiwuyue 的回复:
n_id='" + myid + "'");
id如果是int不需要加'',否则会错的


是string的

#11


引用 4 楼 sohohu 的回复:
用datalist,id为list_id
在ItemTemplate添加一个隐藏的html控件input, <input type="hidden" id="SelectedID" runat="server" value=' <%#Eval("n_id")%>' />,再添加一个服务器控件 <asp:checkbox id="X_Z" runat="server" />
再在datalist外添加一个button服务器控件,在cs后台添加该button事件:
string dgIDs = "";
bool BxsChkd = false;
foreach (DataListItem y in list_id.Items)
{
if (((CheckBox)y.FindControl…


我现在只能用datagrid。。不能改datalist
否则没办法弄下去。

#12


引用 8 楼 youaskme 的回复:
可怜的楼主,你为什么忘记page_load里增加if(!ispostpack)

protected void Page_Load(object sender, System.EventArgs e)
{
if(!ispostpack) //为什么忘记加他
ds = Socut.Data.ExecuteDataSet("SELECT * FROM socut_news", "TableName");
DataGrid1.DataSource = ds;//设置数据源
DataGrid1.DataBind();//绑定数据
}



哦???难道我????
试试先。

#13


  function SelectAll(frm)
  {
    for (var i=0;i<frm.elements.length;i++)
      frm.elements[i].checked = frm.selectall.checked;
  }
  
function CheckSelect(frm)
{
var col=frm.elements;
var obj=frm.selectall;
var intEls=0,intChks=0;
for(var i=0;i<col.length;i++)
{
if(col[i].type=="checkbox"&&col[i].name!="selectall")
{
intEls++;
if(col[i].checked)
intChks++;
}
}
obj.checked=(intEls==intChks);
}

<asp:datagrid id="DataGrid1" runat="server" Width="100%" AllowPaging="True" PageSize="15" AutoGenerateColumns="False">
<SelectedItemStyle CssClass="SelectedItemback"></SelectedItemStyle>
<AlternatingItemStyle CssClass="Alternatingback"></AlternatingItemStyle>
<ItemStyle CssClass="griditem"></ItemStyle>
<HeaderStyle CssClass="gridheader"></HeaderStyle>
<Columns>
<asp:BoundColumn Visible="False" DataField="ZT" HeaderText="状态"></asp:BoundColumn>
<asp:TemplateColumn HeaderText="&lt;input type=checkbox name='selectall' onClick='SelectAll(document.Form1)'&gt;全选">
<HeaderStyle Font-Bold="True" HorizontalAlign="Center" Width="8%"></HeaderStyle>
<ItemTemplate>
<asp:CheckBox id="CheckBox1" runat="server"></asp:CheckBox>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
<PagerStyle Visible="False"></PagerStyle>
</asp:datagrid>


private void But_Del_Click(object sender, System.EventArgs e)
{
string XTBH="",BH="";
foreach(DataGridItem item in  DataGrid1.Items)
{
if(((CheckBox)item.FindControl("CheckBox1")).Checked)
{
XTBH+=item.Cells[2].Text.ToString().Trim()+",";
}
}
if(XTBH.Length==0)
{
this.Response.Write("<script language='javascript'>alert('请选择要操作的数据')</script>");
return;
}
XTBH=XTBH.Substring(0,XTBH.Length-1);
BH="in ("+XTBH+")";
 Socut.Data.ExecuteDataSet("DELETE FROM socut_news WHERE n_id in '" + BH+ "'");

//删除数据
                         // 绑定数据
}

#14


回八楼。。没用哦
加了还是按钮没反应。

我觉得还是取值的问题。取不到。

#15


帮顶

#16


#17


#18


谢谢楼上的
但是我看了半天,看不出有什么联系?

谁能明确指出我的代码里面的问题吗?
我觉得我这样比较写的简洁了,不想再复杂化。

#19


楼主注意身体哈,先顶

#20


应该是个很简单的问题,建议楼主将整个页面的代码(cs,xhtml)都帖出来,让大家给你测试一下,相信很快就ok

#21


要加上 if(!ispostback) ,如果取不到.可以设置断点高度下


__________
QQ:3761290

#22


        protected void Button1_OnClick(object sender, EventArgs e)
        {
            for (int i = 0; i < DataGrid1.Items.Count; i++)
            {
                HtmlInputCheckBox mychk = (HtmlInputCheckBox)DataGrid1.Items[i].FindControl("sel");
                if (mychk.Checked == true)
                {
                    string myid = mychk.value; //修改了
                    Socut.Data.ExecuteDataSet("DELETE FROM socut_news WHERE n_id='" + myid + "'");
                }
            } 
        }

#23


在Access数据库里主键不需要加“,但在SQL里可以加,也可以不加。

#24


引用 20 楼 LikeCode 的回复:
应该是个很简单的问题,建议楼主将整个页面的代码(cs,xhtml)都帖出来,让大家给你测试一下,相信很快就ok

好的,我都贴,我自己也是弄的测试页面。
环境:xp professional sp3。vs2005。.net2.0.iis5.1。sql2000



<%@ Page language="c#" Inherits="Show_Socut_Data.News.Manage" CodeFile="Manage.aspx.cs" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>Manage</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
<script language="javascript">
        function checkAll()
        {            
            var frm=document.Form1 ;
              
            for(var i=0;i<frm.elements.length;i++)
            {
            
                var e=frm.elements[i];
                
                if(e.name!="allbox" && e.type=="checkbox") //仅对datagrid <itemTemplate>中的checkbox执行操作
                {
                    var eName= e.name.split(':');
                    if(eName[0]=="DataGrid1")
                    {
                        e.checked=frm.allbox.checked;
                    }                    
                }
            }                   
        }        
        </script>
</HEAD>
<body>
<form id="Form1" method="post" runat="server">
<table cellSpacing="1" cellPadding="5" width="780" align="center" bgColor="#cccccc" border="0">
<tr>
<td align="center" width="788" bgColor="#ffffff" height="150">网站顶部</td>
</tr>
</table>
<table cellSpacing="1" cellPadding="5" width="780" align="center" bgColor="#cccccc" border="0">
<tr bgColor="#ffffff">
<td width="180" height="200">用户登陆</td>
<td vAlign="top" rowSpan="2">
<asp:datagrid id="DataGrid1" runat="server" DataKeyField="n_id" AutoGenerateColumns="False" Height="120px" Width="575px">
<Columns>
<asp:TemplateColumn HeaderText="求职信息:">
<ItemTemplate>
                                       <input id="sel" name="sel" type="checkbox" runat="server" value=<%#Eval("n_id")%>/>
                                            <a href='edit.aspx?id=<%#Eval("n_id")%>' target=_blank>
编辑</a>·<a href='view.aspx?id=<%#Eval("n_id")%>' target=_blank><%#Eval("n_title")%></a>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:datagrid> 
<input type="checkbox" name="allbox" onclick="javascript:checkAll();">
                           <asp:Button ID="Button1" runat="server" OnClick="Button1_OnClick" Text="Delete Selected"
                            Width="174px" /></td>
</tr>
<tr bgColor="#ffffff">
<td height="200">文章统计</td>
</tr>
</table>
<table cellSpacing="1" cellPadding="5" width="780" align="center" bgColor="#cccccc" border="0">
<tr>
<td align="center" width="788" bgColor="#ffffff" height="150">
                        网站底部</td>
</tr>
</table>
</form>
</body>
</HTML>

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;


namespace Show_Socut_Data.News
{
    /// <summary>
    /// Manage 的摘要说明。
    /// </summary>
    public partial class Manage : System.Web.UI.Page
    {

        public DataSet ds = new DataSet();//将DataSet实例化
        

        protected void Page_Load(object sender, System.EventArgs e)
        {
            if (!IsPostBack)
            {
                ds = Socut.Data.ExecuteDataSet("SELECT * FROM socut_news", "TableName");
                DataGrid1.DataSource = ds;//设置数据源            
                DataGrid1.DataBind();//绑定数据
            }
            
        }


        #region Web 窗体设计器生成的代码
        override protected void OnInit(EventArgs e)
        {
            //
            // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
            //
            InitializeComponent();
            base.OnInit(e);
        }

        /// <summary>
        /// 设计器支持所需的方法 - 不要使用代码编辑器修改
        /// 此方法的内容。
        /// </summary>
        private void InitializeComponent()
        {

        }
        #endregion


        protected void Button1_OnClick(object sender, EventArgs e)
        {
            int mycount = DataGrid1.Items.Count;
            for (int i = 0; i < mycount; i++)
            {
                HtmlInputCheckBox mychk = (HtmlInputCheckBox)DataGrid1.Items[i].FindControl("sel");
                if (mychk.Checked == true)
                {
                    string myid = Request["sel"];
                    Socut.Data.ExecuteDataSet("DELETE FROM socut_news WHERE n_id='" + myid + "'");
                }
            } 
        }
   }
}

#25


我用了一个数据库组件
socut.data.dll3.1

#26


引用 22 楼 ycyangcai 的回复:
protected void Button1_OnClick(object sender, EventArgs e)
{
for (int i = 0; i  < DataGrid1.Items.Count; i++)
{
HtmlInputCheckBox mychk = (HtmlInputCheckBox)DataGrid1.Items[i].FindControl("sel");
if (mychk.Checked == true)
{
string myid = mychk.value; //修改了
Socut.Data.ExecuteDataSet("DELETE FROM socut_news WHERE n_id='" + myid + "'");
}
}
}

测试了没有用。
mychk是定义的Htmlinputcheckbox的值,只有true或者false。不可能行得通
即使换成了sel.value也不行。
报错提示:上下文没有sel的定义

#27


因为input不是服务器控件,回调过后他的状态是不会得以保存的,你可以把它换成asp:CheckBox或者在input中
加上enableviewstate:
<input id="sel"  enableviewstate="true" name="sel" type="checkbox" runat="server" value='<%#Eval("n_id")%>' />

#28


另外,你既然已经使它runat="server"了,就不能再用Request["sel"]来获取它的Value了,直接用
string myid = mychk.Value;即可

#29


引用 29 楼 ojlovecd 的回复:
另外,你既然已经使它runat="server"了,就不能再用Request["sel"]来获取它的Value了,直接用 
string myid = mychk.Value;即可

……LZ的上一个帖子里我回复了,当时在网吧,手打代码,mychk.value,如果LZ是直接复制的话实在是抱歉了……

#30


引用 30 楼 belldandy11 的回复:
引用 29 楼 ojlovecd 的回复:
另外,你既然已经使它runat="server"了,就不能再用Request["sel"]来获取它的Value了,直接用
string myid = mychk.Value;即可

……LZ的上一个帖子里我回复了,当时在网吧,手打代码,mychk.value,如果LZ是直接复制的话实在是抱歉了……


您的意思是??v不要大写还是???
另外mychk没有value属性。
应该是sel吧?
对不对?

#31


引用 31 楼 nickandjayzhou 的回复:
引用 30 楼 belldandy11 的回复:
引用 29 楼 ojlovecd 的回复:
另外,你既然已经使它runat="server"了,就不能再用Request["sel"]来获取它的Value了,直接用
string myid = mychk.Value;即可

……LZ的上一个帖子里我回复了,当时在网吧,手打代码,mychk.value,如果LZ是直接复制的话实在是抱歉了……


您的意思是??v不要大写还是???
另外mychk没有value属性。
应该是sel吧?
对不对?

HtmlInputCheckBox 类型怎么可能没有Value属性 关于checkbox取值的老问题,我弄了两天加一个通宵就是搞不定,大家帮帮忙,来看看

#32


坚持住!我有过你类似的经历,最后一定可以搞定!

#33


引用 1 楼 fengqiwuyue 的回复:
n_id='" + myid + "'"); 
id如果是int不需要加'',否则会错的


PS: 
我的目标是 ---->  关于checkbox取值的老问题,我弄了两天加一个通宵就是搞不定,大家帮帮忙,来看看关于checkbox取值的老问题,我弄了两天加一个通宵就是搞不定,大家帮帮忙,来看看关于checkbox取值的老问题,我弄了两天加一个通宵就是搞不定,大家帮帮忙,来看看关于checkbox取值的老问题,我弄了两天加一个通宵就是搞不定,大家帮帮忙,来看看关于checkbox取值的老问题,我弄了两天加一个通宵就是搞不定,大家帮帮忙,来看看关于checkbox取值的老问题,我弄了两天加一个通宵就是搞不定,大家帮帮忙,来看看

^_^

#34



这里是删除按钮代码:
System.Web.UI.WebControls.CheckBox chk;
        int all = this.DLJobList.Items.Count;
        for (int i = 0; i < all; i++)
        {
            chk = (CheckBox)(this.DLJobList.Items[i].FindControl("chkExport"));
            if (chk.Checked == true)
            {
                j++;
            }
        }
        if (j == 0)
        {
            this.ClientScript.RegisterClientScriptBlock(this.GetType(), "a", "alert('请选择要操作的项!');", true);
            return;
        }
        else
        {
            try
            {
                for (int i = 0; i < all; i++)
                {
                    chk = (CheckBox)(this.DLJobList.Items[i].FindControl("chkExport"));
                    if (chk.Checked == true)
                    {
                        int JobID = Convert.ToInt32(this.DLJobList.DataKeys[this.DLJobList.Items[i].ItemIndex]);
                        myjob.DelQq_Job(JobID);
                    }
                }
                LoadJobList(ViewState["strsql"].ToString());
            }
            catch (Exception ex)
            {
                this.ClientScript.RegisterClientScriptBlock(this.GetType(), "a", "alert('操作失败!数据库维护中!');", true);
                return;
            }
        }
以上功能可以用的,我一直在这样用的

#35


引用 32 楼 ojlovecd 的回复:
引用 31 楼 nickandjayzhou 的回复:
引用 30 楼 belldandy11 的回复:
引用 29 楼 ojlovecd 的回复:
另外,你既然已经使它runat="server"了,就不能再用Request["sel"]来获取它的Value了,直接用
string myid = mychk.Value;即可

……LZ的上一个帖子里我回复了,当时在网吧,手打代码,mychk.value,如果LZ是直接复制的话实在是抱歉了……


您的意思是??v不要大写还是???
另外mychk没有value属性。
应该是sel吧…


但是strID提取的是我的u_id。
mychk是个bool型,只是中间用来测试的吧
我提取他的值有什么用呢

#36


引用 35 楼 jrl5365 的回复:
这里是删除按钮代码:
System.Web.UI.WebControls.CheckBox chk;
int all = this.DLJobList.Items.Count;
for (int i = 0; i  < all; i++)
{
chk = (CheckBox)(this.DLJobList.Items[i].FindControl("chkExport"));
if (chk.Checked == true)
{
j++;
}
}
if (j == 0)
{
this.ClientScript.RegisterClientScriptBlock(this.GetType(), "a", "alert('请选择要操作的项!');", true);
return;
}
else
{
try
{


貌似太复杂了,我也测试了,不大有作用,很多小地方出错。
我这里就想大家帮忙找下我代码的错误。。

#37


首先楼主设断点看看你后台的代码取值是多少,取没取到值


楼主这里定义了  <input id="sel" name="sel" type="checkbox" runat="server" value=<%#Eval("n_id")%>/>

31楼你说取mychk.Value 是true 或false  真是这样的话 value=<%#Eval("n_id")%>就没意义了

这样的话你试试在它后面加个hidden 

<INPUT id="txtN_id" type="hidden" value=<%#Eval("n_id")%> name="Hidden1" runat="server">

然后在后台代码取txtN_id 的value

#38


简单说一下思路:

取值操作可以交给客户端js来处理,再将所有选中checkbox的值用一个分割符拼接起来 如: 1,2,3 再把这个串交给带runat=server 的隐藏域,后台在触发"批量删除"按钮操作时,直接取该隐藏域的值就可以了

#39


        for (int i = 0; i < mycount; i++)
        {
            //HtmlInputCheckBox mychk = (HtmlInputCheckBox)DataGrid1.Items[i].FindControl("Checkbox1");
            HtmlInputCheckBox mychk = (HtmlInputCheckBox)GridView1.Rows[i].FindControl("Checkbox1");
            if (mychk.Checked == true)
            {
                string myid = mychk.Value;
                //Socut.Data.ExecuteDataSet("DELETE FROM socut_news WHERE n_id='" + myid + "'");
                Response.Write(myid);
            }
        } 


可以^0^

#40


引用 36 楼 nickandjayzhou 的回复:
但是strID提取的是我的u_id。
mychk是个bool型,只是中间用来测试的吧
我提取他的值有什么用呢

strID是什么?哪来的?你24楼的代码哪有这东西?
你24楼代码这么定义
HtmlInputCheckBox mychk = (HtmlInputCheckBox)DataGrid1.Items[i].FindControl("sel");
那么mychk又怎么会是bool型?
你的思维很混乱

#41


谢谢楼上所有朋友。
可能这几天没休息好,搞的我脑溢血常识都不知道了。
mychk.checked是bool值。mychk的value是有的。
哎呀,会过来一看,原来是这么简单的问题。
我还在request【“sel”】

现在解决了,谢谢所有提过建议的朋友们。
我解决的最后关键就是request没用。
改用mychk.value,然后!ispostback不能丢了。

再次在此谢谢各位了~!!!

#42


引用 41 楼 ojlovecd 的回复:
引用 36 楼 nickandjayzhou 的回复:
但是strID提取的是我的u_id。
mychk是个bool型,只是中间用来测试的吧
我提取他的值有什么用呢

strID是什么?哪来的?你24楼的代码哪有这东西?
你24楼代码这么定义
HtmlInputCheckBox mychk = (HtmlInputCheckBox)DataGrid1.Items[i].FindControl("sel");
那么mychk又怎么会是bool型?
你的思维很混乱


对不起对不起
谢谢你的帮助。
我太久没睡觉了,所以有些搞不清了。谢谢你。

#43


总算能踏实安心睡个好觉了。。。。

55555555

#44


LZ可以用服务器端控件。
应该可以搞定,我做过用户管理在gridview里加checkbox后台遍历gridview每行。