读书人

在GripView中怎么在每行前加CheckBox

发布时间: 2012-01-19 20:57:58 作者: rapoo

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

[解决办法]
随便搜了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吧。
[解决办法]
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.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)
{
//你要的操作
}
}

}
[解决办法]
帖出我做的其中一个页面的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 ") & ")
[解决办法]
前台:

<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( "提交出现错误! ");
}
}



[解决办法]
添加一模板,并拖入一 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;
// ....
}
}
}


读书人网 >asp.net

热点推荐