C# 中的DataGridView控件如何设置成具有复选框功能?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 中的DataGridView控件如何设置成具有复选框功能?相关的知识,希望对你有一定的参考价值。

如下图左边的复选框:

<Columns>
<asp:TemplateColumn HeaderText="Checked" HeaderStyle-Width="30">
<HeaderTemplate>
<input id="chkAllInBox" type="checkbox" onclick="selectAll('chkAllInBox','<%# this.grdList.ClientID %>')" />
</HeaderTemplate>
<ItemTemplate>
<input type="checkbox" id="chids" value='<%# DataBinder.Eval(Container, "DataItem.ID") %>'
runat="server" name="chids" />
</ItemTemplate>
<HeaderStyle Width="30px"></HeaderStyle>
<ItemStyle Font-Bold="False" Font-Italic="False" Font-Overline="False" Font-Strikeout="False"
Font-Underline="False" HorizontalAlign="Center" />
</asp:TemplateColumn>
<asp:BoundColumn DataField="ID" SortExpression="ID" HeaderText="id" Visible="false">
</asp:BoundColumn>
<asp:BoundColumn DataField="EventCount" SortExpression="EventCount" HeaderText='数量'></asp:BoundColumn>
<asp:BoundColumn DataField="DomainName" HeaderText="类型" SortExpression="DomainName">
</asp:BoundColumn>
<asp:BoundColumn DataField="CalItemName" SortExpression="CalItemName" HeaderText="计算项">
</asp:BoundColumn>
<asp:BoundColumn DataField="CalUnitName" SortExpression="CalUnitName" HeaderText="地区或单位">
</asp:BoundColumn>
<asp:BoundColumn DataField="EventDesc" SortExpression="EventDesc" HeaderText="事件描述">
</asp:BoundColumn>
<asp:BoundColumn DataField="Month" SortExpression="Month" HeaderText="上报月份"></asp:BoundColumn>
<asp:BoundColumn DataField="DraftWriter" SortExpression="DraftWriter" HeaderText="填写人">
</asp:BoundColumn>
<asp:BoundColumn DataField="DraftWriteTime" SortExpression="DraftWriteTime" HeaderText="填写时间"
DataFormatString='0:d'></asp:BoundColumn>
<%--<asp:TemplateColumn>
<HeaderTemplate>
<asp:Label ID="lblPar1Name" runat="server"></asp:Label>
</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="lblPar1" runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn>
<HeaderTemplate>
<asp:Label ID="lblPar2Name" runat="server"></asp:Label>
</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="lblPar2" runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn>
<HeaderTemplate>
<asp:Label ID="lblPar3Name" runat="server"></asp:Label>
</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="lblPar3" runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateColumn>--%>
<asp:BoundColumn DataField="Par1" SortExpression="Par1" HeaderText="批次" Visible="False">
</asp:BoundColumn>
<asp:BoundColumn DataField="Par2" SortExpression="Par2" HeaderText="Par2" Visible="False">
</asp:BoundColumn>
<asp:BoundColumn DataField="Par3" SortExpression="Par3" HeaderText="Par3" Visible="False">
</asp:BoundColumn>
<asp:TemplateColumn HeaderStyle-Width="40" ItemStyle-HorizontalAlign="Center" HeaderText="编辑">
<ItemTemplate>
<asp:HyperLink ID="hlkEditInfo" runat="server" ImageUrl="~/images/edit.gif" NavigateUrl='<%# EditUrl("ItemId",DataBinder.Eval(Container, "DataItem.ID").ToString(),"Edit") %>'></asp:HyperLink>
</ItemTemplate>
<HeaderStyle Width="40px"></HeaderStyle>
<ItemStyle HorizontalAlign="Center"></ItemStyle>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderStyle-Width="40" ItemStyle-HorizontalAlign="Center" HeaderText="删除">
<ItemTemplate>
<asp:LinkButton runat="server" ID="lbnDelInfo" CommandName="CommandDelete" BorderStyle="None">
<asp:Image runat="server" ID="imgDelete" BorderStyle="None" ImageUrl="~\images\button_delete.gif"
ImageAlign="AbsMiddle"></asp:Image>
</asp:LinkButton>
</ItemTemplate>
<HeaderStyle Width="40px"></HeaderStyle>
<ItemStyle HorizontalAlign="Center"></ItemStyle>
</asp:TemplateColumn>
</Columns>

<script language="javascript">
//全选
function selectAll(SourceID, ControlID)
var sourceBox = document.getElementById(SourceID);
var theBox = document.all(ControlID);

elm = theBox.getElementsByTagName('Input');
for (i = 0; i < elm.length; i++)
if (elm[i].type == "checkbox")
elm[i].checked = sourceBox.checked;



//选择删除检测
function CheckNULL(ControlID)
var isNULL = false;
var theBox = document.all(ControlID);
elm = theBox.getElementsByTagName('Input');

for (var i = 0; i < elm.length; i++)
var e = elm[i];
if (e.type == "checkbox" && e.checked == true && e.id != "chkAllInBox")
isNULL = true;


if (isNULL == false)
alert('请选择删除项!');
return false;

else
return confirm('确定要删除信息?');


</script>
参考技术A checkbox控件。
方法1、为checkbox控件增加客户端点击事件,用JSON对象保存选中项目,在其他按钮提交的时候将该JSON对象转换写入LIST<T>集合中。优点:不需要每次都提交刷新页面。
方法2、将该checkbox设置:AutoPostBack=true。到后台代码检测点击的是哪一行,再进行你的LIST泛型对象的增加删除逻辑。
参考技术B 将你要显示成checkbox的column type直接改成DataGridViewCheckBoxColumn即可。
也可以在插入新column时可以直接设置。追问

我是从数据库直接获取一张表绑定到DataGridView中,如何把整张表都设置成具有复选框功能?

追答

column的类型是不能被你以编程的形式动态的改变的。强制改变会抛出wrong type异常
你应该在导入数据的时候判断行列,然后建立CheckBoxColumn
---给你提供一种强制改变所有cell类型的方法---
for (int i = 0; i < dataGridView1.RowCount; i++)

for (int j = 0; j < dataGridView1.ColumnCount; j++)

dataGridView1.Rows[i].Cells[j] = new DataGridViewCheckBoxCell();

本回答被提问者采纳

winform中的DataGridView如何实现分页(C#)

能跟讲讲实现思路吗 不要代码

常用分页一般有两种
一是在数据库写存储过程,或利用sql语句,每次只取出N条数据。
二是将数据一次性全取出来,然后利用程序来进行分页。
第一种在数据量比较大的时候性能好点。
希望你能明白。
参考技术A 这个要添加 DataGridView 控件的功能
写一个“用户控件”,继承DataGridView
public partial class UserControl1 : DataGridView
然后再添加一些翻页的方法
参考技术B 应该在后台就实现分页。DataGridView显示分页数据就可以了。 参考技术C http://www.cnblogs.com/sayu115/archive/2007/10/12/922115.html 参考技术D 你可以再视图下面放按钮,上一页下一页这些,然后放lable用于显示当前页和总页数也方便以后获取当前页数
方法一:查询出所有数据,获取你数据源的总行数,然后用你的总行数除以一行显示的数量, 得出的就是你的总页数
第一次进入当前页肯定是1在绑定数据数据时根据当前页和行数从你的数据源中取值,然后将取出的数据绑定你的DataGridView
在点击下一页或者上一页这些时++或--你的当前页,当然最后一页和第一页的时要进行判断的,否则就要出错了
方法二:写一个存储过程,传入当前页和每页行数,sql和oracle等数据库都有标识列,以此作为条件,只取出一部分数据绑定到DataGridView中,每一次点击按钮时,调用该存储过程获取数据,优势是在大数据量时查询效率比第一种方法效率高,并且在数据结构发生改变时方便维护,可以只修改存储过程

以上是关于C# 中的DataGridView控件如何设置成具有复选框功能?的主要内容,如果未能解决你的问题,请参考以下文章

C# 选中 DataGridView 控件中的行时显示不同的颜色

c# datagridview控件如何修改行高

在C#里怎么将DataGridView控件和数据库的查询绑定起来啊。

如何在一个DataGridView中的一列添加DateTimePicker控件 C#

c#中datagridview的标题颜色设置问题

c# datagridview 设置某列为日期