在VS2005平台上用C#,在新建设备资料网页中,需输入及选择数据,最后确定保存。有个GripView,如何在其中每行前加入CheckBox,最后按本网页确定键后,如何获得选中行的数据?可选中多行,请指教,谢谢!

解决方案 »

  1.   

    借一个 隐藏的 input 来保存 主键:
    <input type="hidden" id="SelectedID" runat="server" value='<%# DataBinder.Eval(Container.DataItem, "id")%>'/>
    <asp:CheckBox ID="ChkPhoto" runat="server" />
      

  2.   

    随便搜了4个例子:http://www.cnblogs.com/eddie005/archive/2006/07/04/442837.aspx
    http://blog.csdn.net/net_lover/archive/2006/10/25/1351234.aspx
    http://www.dwww.cn/News/2007-7/2007726178115245.shtml
    http://hugh-lin.cnblogs.com/archive/2005/08/10/211549.html自己学着google吧。
      

  3.   

    GridView加checkbox与DATAGRID加checkbox没什么区别
    无非用个模板列,放个checkbox,再用一段JS脚本控制checkbox的值
    提交的时候,再从gridview上获取checkbox,判断checkbox.checked的值就可以知道,哪条记录被选中了,思路基本上是这样。
      

  4.   

    建议继承GridView
    以下代码添加一个模板列 包含一个checkbox
     protected override void OnInit(EventArgs e)
            {
                base.OnInit(e);
                
                    TemplateField field = this.Columns[0] as TemplateField;
                    if (field == null || !(field.ItemTemplate is SelectField))
                    {
                        this.Columns.Insert(0, SelectField.CreateSelectField("KeyValue"));
                    }
     }
    以下是SelectField.cs
    using System;
    using System.Collections.Generic;
    using System.Collections.Specialized;
    using System.ComponentModel;
    using System.Data;
    using System.Text;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;namespace FFCS.BNet.Controls
    {
        /// <summary>
        /// 选择域
        /// </summary>
        [ToolboxData("<{0}:SelectField runat=server></{0}:SelectField>")]
        public class SelectField : DataControlField, IBindableTemplate, ITemplate
        {
            private DataControlRowType templateType;
            private string columnName;
            private string _dataField;        /// <summary>
            /// 构造函数
            /// </summary>
            /// <param name="type">类型</param>
            /// <param name="colname">名称</param>
            /// <param name="dataField">数据域</param>
            public SelectField(DataControlRowType type, string colname, string dataField)
            {
                templateType = type;
                columnName = colname;
                _dataField = dataField;
            }        /// <summary>
            /// 构造函数
            /// </summary>
            /// <param name="type">类型</param>
            /// <param name="colname">名称</param>
            public SelectField(DataControlRowType type, string colname)
            {
                templateType = type;
                columnName = colname;
            }        /// <summary>
            /// 工厂 创建 SelectField
            /// </summary>
            /// <returns>DataControlField</returns>
            protected override DataControlField CreateField()
            {
                return new SelectField(DataControlRowType.DataRow, "");
            }        /// <summary>
            /// 数据绑定
            /// </summary>
            /// <param name="sender">发送者</param>
            /// <param name="e">事件参数</param>
            private void checkBox_DataBinding(object sender, EventArgs e)
            {            CloverCheckBox checkBox = (CloverCheckBox)sender;
                GridViewRow container = (GridViewRow)checkBox.NamingContainer;
                checkBox.Value = DataBinder.Eval(container.DataItem, _dataField).ToString();
            }        /// <summary>
            /// 工厂 创建SelectField
            /// </summary>
            /// <param name="dataField">数据域</param>
            /// <returns>TemplateField</returns>
            public static TemplateField CreateSelectField(string dataField)
            {
                TemplateField selectField = new TemplateField();
                selectField.ShowHeader = true;
                selectField.HeaderTemplate = new SelectField(DataControlRowType.Header, "<span style=\"cursor:hand\">全选</span>");
                selectField.ItemTemplate = new SelectField(DataControlRowType.DataRow, "", dataField);
                return selectField;
            }
            /// <summary>
            /// 排序集合
            /// </summary>
            /// <param name="container"></param>
            /// <returns></returns>
            public IOrderedDictionary ExtractValues(System.Web.UI.Control container)
            {
                return new CloverOrderedDictionary();        }
            /// <summary>
            /// 实例化控件
            /// </summary>
            /// <param name="container"></param>
            public void InstantiateIn(System.Web.UI.Control container)
            {
                switch (templateType)
                {
                    case DataControlRowType.Header:
                        {
                            Label lc = new Label();
                            lc.Text = columnName;
                            lc.Attributes.Add("onclick", "javascript:return SelectGridViewField(document,this)");
                            container.Controls.Add(lc);
                            break;
                        }
                    case DataControlRowType.DataRow:
                        {
                            CloverCheckBox checkBox = new CloverCheckBox();
                            //checkBox.ID = "SelectFieldCheckBox";
                            checkBox.Group = "SelectField";                        if (_dataField != null)
                            {
                                checkBox.DataBinding += new EventHandler(checkBox_DataBinding);
                            }
                            container.Controls.Add(checkBox);
                            break;
                        }
                }
            }
        }
    }
      

  5.   

    按钮控件:
    <asp:Button ID="BtnTrue" OnClick="BtnTrue_Click" runat="server" Text="确定" />
    添加按钮事件:
    protected void BtnTrue_Click(object sender, System.EventArgs e)
    {
                foreach(GridDataItem   dt   in   this.DataGrid.Item)   
                {
                    ChkSelect = (CheckBox)dt.item.FindControl("ChkPhoto");
                    if (ChkSelect.Checked)
                    {
                       //你要的操作
                    }
                  }
               
     }
      

  6.   

    帖出我做的其中一个页面的gridView部分的html代码给你:<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" BorderStyle="Ridge"
                                            BorderWidth="1px" CellPadding="5" GridLines="Horizontal" Width="100%">
                                            <Columns>
                                                <asp:TemplateField>
                                                    <HeaderTemplate>
                                                        <input id="CheckAll" onclick="return select_deselectAll (this.checked, this.id)"
                                                tabindex="0" type="checkbox">
                                                    </HeaderTemplate>
                                                    <ItemTemplate>
                                                        <input id="checkid" name="checkid" type="checkbox" value='<%# DataBinder.Eval(Container, "DataItem.b1_01") %>'>
                                                    </ItemTemplate>
                                                </asp:TemplateField>
                                                <asp:BoundField DataField="b1_01" HeaderText="ID" />
                                                <asp:HyperLinkField DataNavigateUrlFields="b1_01" DataNavigateUrlFormatString="admBBS2.aspx?b1Id={0}"
                                                    DataTextField="b1_02" HeaderText="區名稱" />
                                                <asp:HyperLinkField DataNavigateUrlFields="b1_01" DataNavigateUrlFormatString="admBBS2.aspx?b1Id={0}"
                                                    DataTextField="b1_03" HeaderText="區簡介" />
                                                <asp:BoundField DataField="b1_05" HeaderText="主題數" />
                                                <asp:BoundField DataField="b1_04" HeaderText="帖子數" />
                                            </Columns>
                                        </asp:GridView>
    下面是用到的javascript:
    function select_deselectAll (chkVal, idVal) 
      {
       var frm = document.forms[0];
       for (i=0; i<frm.length; i++) 
       {
        if (idVal.indexOf ('CheckAll') != -1)
        {
         if(chkVal == true) 
         {
          frm.elements[i].checked = true;
         } 
         else 
         {
          frm.elements[i].checked = false;
         }
        } 
        else if (idVal.indexOf('DeleteThis') != -1) 
        {
         if(frm.elements[i].checked == false) 
         {
          frm.elements[1].checked = false;
         }
        }
       }
             }最后是例如我要删除选定的记录:
      delete from bbs1 where b1_01 in (" & Request.Form("checkid") & ")
      

  7.   

    你先回到起点,从“点击按钮就动态添加TextBox”这么简单的程序开始学正确正确的控制逻辑编写方法。你的程序太复杂了,不适合很快搞清楚基础知识。
      

  8.   

    前台:   <asp:GridView ID="gvInfo" runat="server" AutoGenerateColumns="False" Width="99%">
                                <Columns>
                                    <asp:TemplateField HeaderText="选择">
                                        <HeaderTemplate>
                                            <input id="chkAll" onclick="javascript:SelectAllCheckboxes(this);" runat="server"
                                                type="checkbox" />
                                        </HeaderTemplate>
                                        <ItemTemplate>
                                            <asp:CheckBox ID="chkSelect" runat="server" />
                                        </ItemTemplate>
                                    </asp:TemplateField>
                                    <asp:BoundField DataField="NumberID"  >
                                        <ItemStyle ForeColor="White" />
                                    </asp:BoundField>
                                    <asp:BoundField DataField="EventSubject" HeaderText="活动主题" />
                                    <asp:BoundField DataField="CustomerName" HeaderText="客户" />
                                    <asp:BoundField DataField="ContactName" HeaderText="联系人" />
                                    <asp:BoundField DataField="EventTypeName" HeaderText="活动类型" />
                                    <asp:BoundField DataField="ActiveModeName" HeaderText="交流方式" />
                                    <asp:BoundField DataField="EventMainStaffName" HeaderText="主负责人" /> 
                                    <asp:BoundField DataField="EventStartDate" HeaderText="开始时间" />
                                    <asp:BoundField DataField="EventEndDate" HeaderText="结束时间" />                                
                                    <asp:BoundField DataField="EventBuildDate" HeaderText="建立时间" />      
                                </Columns>
                            </asp:GridView>   <script language="javascript">
            function SelectAllCheckboxes(spanChk)
            {
             var oItem = spanChk.children;
             var theBox=(spanChk.type=="checkbox")?spanChk:spanChk.children.item[0];
             xState=theBox.checked;
             elm=theBox.form.elements;
             for(i=0;i<elm.length;i++)
             if(elm[i].type=="checkbox" && elm[i].id!=theBox.id)
             {
              if(elm[i].checked!=xState)
              elm[i].click();
             }
            }
        </script>
    后台:
        private void GetSelectRows(string status)
        {
            string numberID = "";
            string NumberIDList = "";        for (int i = 0; i < gvInfo.Rows.Count; i++)
            {
                GridViewRow row = gvInfo.Rows[i];
                bool isChecked = ((CheckBox)row.FindControl("chkSelect")).Checked;
                if (isChecked)
                {
                    numberID = gvInfo.Rows[i].Cells[1].Text;
                    NumberIDList += numberID + "|";
                }
            }        if (NumberIDList + "" == "")
            {
                JScript.Alert("请至少选择一行记录!");
                return;
            }        NumberIDList = NumberIDList.Remove(NumberIDList.Length - 1);
                     try
            {
                SaleEvent_Rule.ManagementAudingInformed(Staff_ID, NumberIDList, status+"");
                JScript.Alert("提交成功!");            ShowToScreen();           
            }
            catch (Exception ex)
            {
               
                JScript.Alert("提交出现错误!");
            }
        }
      

  9.   

    不过,自己要学着使用google ,不能这么依赖
      

  10.   

    添加一模板,并拖入一 CheckBox// .aspx
    <asp:gridview id=GridView1 ...
    <columns>
    <asp:templatefield>
    <itemtemplate>
    <asp:checkbox id=CheckBox1 ...
    ...// .aspx.cs
    ... Button1_Click ...
    {
        foreach(GridViewRow row in GridView1.Rows) {
            CheckBox chk = row.FindControl("CheckBox1") as CheckBox;
            if(chk != null && chk.Checked) { // 选中
                 string str1 = row.Cell[1].Text;
                 string str2 = row.Cell[2].Text;
                 // ....
            }
        }
    }