c#winform中,DataGridView的选择列(DataGridViewCheckBoxColumn)中,如何实现条件选中?

条件选中:比如我点击某行前面的选择框,然后对增长表进行判断,如果该行不能被选中,则选择无效;如果某些数据已经选中的,当点击其中的某行前面的选择框时,判断是否能取消,不能取... 条件选中:比如我点击某行前面的选择框,然后对增长表进行判断,如果该行不能被选中,则选择无效;如果某些数据已经选中的,当点击其中的某行前面的选择框时,判断是否能取消,不能取消的话点选无效,点击过后依然是选中状态。如图所示:列表编号呈树结构,如果移除树节点,则应该移除其相应的子节点,当选中父节点0305时,则相应的以0305开头的所有行的选择框都应该选中,并且不能取消选中,除非取消的行的所有父节点都没选中的情况下才能取消,请问如何实现? 展开
 我来答
zhoujunlong520
2011-04-26
知道答主
回答量:20
采纳率:0%
帮助的人:0
展开全部
5.GridView和CheckBox结合:
效果图:

后台代码:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
public partial class Default5 : System.Web.UI.Page
{

SqlConnection sqlcon;
string strCon = "Data Source=(local);Database=北风贸易;Uid=sa;Pwd=sa";
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
bind();
}
}
protected void CheckBox2_CheckedChanged(object sender, EventArgs e)
{
for (int i = 0; i <= GridView1.Rows.Count - 1; i++)
{
CheckBox cbox = (CheckBox)GridView1.Rows[i].FindControl("CheckBox1");
if (CheckBox2.Checked == true)
{
cbox.Checked = true;
}
else
{
cbox.Checked = false;
}
}
}
protected void Button2_Click(object sender, EventArgs e)
{
sqlcon = new SqlConnection(strCon);
SqlCommand sqlcom;
for (int i = 0; i <= GridView1.Rows.Count - 1; i++)
{
CheckBox cbox = (CheckBox)GridView1.Rows[i].FindControl("CheckBox1");
if (cbox.Checked == true)
{
string sqlstr = "delete from table where 身份证号码='" + GridView1.DataKeys[i].Value + "'";
sqlcom = new SqlCommand(sqlstr, sqlcon);
sqlcon.Open();
sqlcom.ExecuteNonQuery();
sqlcon.Close();
}
}
bind();
}
protected void Button1_Click(object sender, EventArgs e)
{
CheckBox2.Checked = false;
for (int i = 0; i <= GridView1.Rows.Count - 1; i++)
{
CheckBox cbox = (CheckBox)GridView1.Rows[i].FindControl("CheckBox1");
cbox.Checked = false;
}
}
public void bind()
{
string sqlstr = "select top 5 * from table ";
sqlcon = new SqlConnection(strCon);
SqlDataAdapter myda = new SqlDataAdapter(sqlstr, sqlcon);
DataSet myds = new DataSet();
sqlcon.Open();
myda.Fill(myds, "tb_Member");
GridView1.DataSource = myds;
GridView1.DataKeyNames = new string[] { "身份证号码" };
GridView1.DataBind();
sqlcon.Close();
}
}
前台主要代码:
<asp:GridView ID="GridView1" runat="server" AllowSorting="True" AutoGenerateColumns="False"
CellPadding="3" Font-Size="9pt" BackColor="White" BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px">
<FooterStyle BackColor="White" ForeColor="#000066" />
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox ID="CheckBox1" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="身份证号码" HeaderText="用户ID" SortExpression="身份证号码" />
<asp:BoundField DataField="姓名" HeaderText="用户姓名" SortExpression="姓名"/>

<asp:BoundField DataField="家庭住址" HeaderText="家庭住址" SortExpression="家庭住址"/>

</Columns>
<RowStyle ForeColor="#000066" />
<SelectedRowStyle BackColor="#669999" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="White" ForeColor="#000066" HorizontalAlign="Left" />
<HeaderStyle BackColor="#006699" Font-Bold="True" ForeColor="White" />
</asp:GridView>
<asp:CheckBox ID="CheckBox2" runat="server" AutoPostBack="True" Font-Size="9pt" OnCheckedChanged="CheckBox2_CheckedChanged"
Text="全选" />
<asp:Button ID="Button1" runat="server" Font-Size="9pt" Text="取消" OnClick="Button1_Click" />
<asp:Button ID="Button2" runat="server" Font-Size="9pt" Text="删除" OnClick="Button2_Click" />
具体什么用法你自己在去看看,你把这个换成form程序就可以了,你试试把!
追问
我用的是winform
追答
晕 你web 的换成 winform 就OK了 语法一样的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友09b2421c6
2011-04-26
知道答主
回答量:23
采纳率:0%
帮助的人:0
展开全部
private void dgv_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
if ((bool)dgv.Rows[e.RowIndex].Cells["选择"].EditedFormattedValue == true)
{
for (int i = 0; i < dgvDeptName.Rows.Count; i++)
{
if (i != e.RowIndex)
{
if (dgv.Rows[i].Cells["编号"].Value.ToString().StartsWith(dgv.Rows[e.RowIndex].Cells["编号"].Value))
{
dgv.Rows[i].Cells["选择"].Value = true;
}
}
}
}
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
威力王噶
2011-04-26 · TA获得超过126个赞
知道答主
回答量:138
采纳率:100%
帮助的人:36.2万
展开全部
你可以遍历出所有的复选框,然后截取以0305开头的,如果是以这开头,然后获得这个复选框,Enabled设为不可用.ok?
更多追问追答
追问
关键是如何实现取消,比如上图中点击030501的复选框后,应该去判断它的父节点是否选中的,是的话就还是选中状态,也就是说点击无效
追答
其实不然,因为你点击了0305之后  ,你后面的比如说030501也应该选中,然后用enbled让它不可用对吗?所以,只要你点击0305之后,以它开头的都enbled了,那绝对的是点击无效嘛
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
egghead008
2011-04-27 · TA获得超过1164个赞
知道小有建树答主
回答量:1424
采纳率:100%
帮助的人:1387万
展开全部
这个是一个通用的取消方法,你自己改改吧:

for (int i = 0; i < dg_TableInfo.Rows.Count; i++)
{
DataGridViewCheckBoxCell checkCell = (DataGridViewCheckBoxCell)dg_TableInfo.Rows[i].Cells["CheckSelect"];

// if (!(bool)checkCell.FormattedValue)
{

if (Flag)
checkCell.Value = 1;
else
{
checkCell.Value = 0;
}

}

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式