在GripView中如何在每行前加CheckBox,求助! 在VS2005平台上用C#,在新建设备资料网页中,需输入及选择数据,最后确定保存。有个GripView,如何在其中每行前加入CheckBox,最后按本网页确定键后,如何获得选中行的数据?可选中多行,请指教,谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 借一个 隐藏的 input 来保存 主键:<input type="hidden" id="SelectedID" runat="server" value='<%# DataBinder.Eval(Container.DataItem, "id")%>'/><asp:CheckBox ID="ChkPhoto" runat="server" /> 随便搜了4个例子:http://www.cnblogs.com/eddie005/archive/2006/07/04/442837.aspxhttp://blog.csdn.net/net_lover/archive/2006/10/25/1351234.aspxhttp://www.dwww.cn/News/2007-7/2007726178115245.shtmlhttp://hugh-lin.cnblogs.com/archive/2005/08/10/211549.html自己学着google吧。 GridView加checkbox与DATAGRID加checkbox没什么区别无非用个模板列,放个checkbox,再用一段JS脚本控制checkbox的值提交的时候,再从gridview上获取checkbox,判断checkbox.checked的值就可以知道,哪条记录被选中了,思路基本上是这样。 建议继承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.csusing 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; } } } }} 按钮控件:<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) { //你要的操作 } } } 帖出我做的其中一个页面的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") & ") 你先回到起点,从“点击按钮就动态添加TextBox”这么简单的程序开始学正确正确的控制逻辑编写方法。你的程序太复杂了,不适合很快搞清楚基础知识。 前台: <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("提交出现错误!"); } } 不过,自己要学着使用google ,不能这么依赖 添加一模板,并拖入一 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; // .... } }} webservice 调用自定义类 给分贴 谢谢帮助我的一个朋友 请问一个datalist控件的问题 我的存储过程怎么传条件传不过去啊,帮我看看啊 如何去除小数点后面的0,例如2.34000 显示为2.34 在web怎么才能够掉winform?? 求救:如何在用户控件中显示隐藏的层 多表插入问题 用过asp.net + sql anywhere 9.0的朋友进来帮看一下...在线等 为什么第一行总是空了3个字位 遇到不會的問題了 装好sql server 2005后要如何配置才能正确使用?急!
<input type="hidden" id="SelectedID" runat="server" value='<%# DataBinder.Eval(Container.DataItem, "id")%>'/>
<asp:CheckBox ID="ChkPhoto" runat="server" />
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吧。
无非用个模板列,放个checkbox,再用一段JS脚本控制checkbox的值
提交的时候,再从gridview上获取checkbox,判断checkbox.checked的值就可以知道,哪条记录被选中了,思路基本上是这样。
以下代码添加一个模板列 包含一个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;
}
}
}
}
}
<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)
{
//你要的操作
}
}
}
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") & ")
<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("提交出现错误!");
}
}
<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;
// ....
}
}
}