gridview中的checkboxfield怎么用

hfljy_2008 2008-11-23 11:02:30
谁能告诉我gridview中的checkboxfield怎么用
我是想把一个老师是否有这个权限给显示出来
而且我可以改这个checkbox是否被选中
改变它的状态以后还要存到数据库中。
...全文
4416 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
ahooiu 2012-08-19
  • 打赏
  • 举报
回复
一直没怎么懂这个控件
「已注销」 2012-07-23
  • 打赏
  • 举报
回复
ting
xiejing053654 2009-08-14
  • 打赏
  • 举报
回复
挺!
大猫钓鱼 2008-11-24
  • 打赏
  • 举报
回复
其实就是遍历gridview和判断权限的过程 楼上给出的差不多了。。。
浮生若梦丶 2008-11-24
  • 打赏
  • 举报
回复


protected void gdvUserList_RowDataBound(object sender, GridViewRowEventArgs e)
{
//如果是绑定数据行
if (e.Row.RowType == DataControlRowType.DataRow)
{
//鼠标经过时,行背景色变
e.Row.Attributes.Add("onmouseover", "c=this.style.backgroundColor;this.style.backgroundColor='#d5e3f6'");
//鼠标移出时,行背景色变
e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor=c");
//单击行跳转并传值到 .aspx 页面,以将行中的值赋到对应的text框中

//e.Row.Attributes.Add("ondblclick", "window.location.href='.aspx?Id=" + this..DataKeys[e.Row.RowIndex].Value + "'");
}

if (e.Row.Cells[25].Text == "已激活")
{
CheckBox hzf = (CheckBox)e.Row.Cells[1].FindControl("ckbSelect2"); //寻找已激活的行的复选框
hzf.Checked = true;//已激活行的的复选框选中状态设置为选中
hzf.Enabled = false;//已激活行的的复选框启用状态设置为未启用
hzf.Visible = false;
LinkButton link = (LinkButton)e.Row.Cells[1].FindControl("LinkNoActive");
link.Visible = true;
//e.Row.Cells[1].Text="取消激活";
//e.Row.Cells[1].Attributes.Add("onmouseover", "this.style.cursor='hand'");
//e.Row.Cells[1].Attributes.Add("onclick", "if(confirm('是否删除该用户?')) return true ;else return false ;");

}

memberDB mb = new memberDB();

int i = e.Row.RowIndex;
if (i != -1)//此处不从gridview的标头开始
{
string areaCode = gdvUserList.DataKeys[i]["AreaCode"].ToString();
string cityCode = gdvUserList.DataKeys[i]["CityCode"].ToString();
if (areaCode != "")
{
if (areaCode != null)
{
if (areaCode != "000")
{
if (cityCode != "")
{
if (cityCode != null)
{
if (cityCode != "000")
{
DataTable dt = tools.ConvertDataReaderToDataTable(mb.getAreaCity(cityCode, areaCode));
e.Row.Cells[9].Text = dt.Rows[0][0].ToString();//替换第七列的城市的值
}
}
}
}
}
}
}
}
wjxluck 2008-11-24
  • 打赏
  • 举报
回复
上面基本上都说完了
hs1983 2008-11-24
  • 打赏
  • 举报
回复
有个类似代码给你参考:
***.aspx:
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" Width="639px" DataKeyNames="powers_Id" OnRowDataBound="GridView1_RowDataBound" AllowPaging="True" PageSize="15">
<Columns>
<asp:BoundField HeaderText="序号" />
<asp:BoundField DataField="users_Name" HeaderText="客户经理" />
<asp:TemplateField HeaderText="浏览">
<EditItemTemplate>
 
</EditItemTemplate>
<ItemTemplate>
<asp:CheckBox ID="powersView" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="查询">
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:CheckBox ID="powersSearch" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="添加">
<EditItemTemplate>
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:CheckBox ID="powersAdd" runat="server" /> 
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="修改">
<EditItemTemplate>
<asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
 <asp:CheckBox ID="powersModi" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="删除">
<EditItemTemplate>
<asp:TextBox ID="TextBox4" runat="server"></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
 <asp:CheckBox ID="powersDel" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="审批">
<EditItemTemplate>
<asp:TextBox ID="TextBox5" runat="server"></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
 <asp:CheckBox ID="powersCheck" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="移动">
<EditItemTemplate>
<asp:TextBox ID="TextBox6" runat="server"></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
 <asp:CheckBox ID="powersMove" runat="server" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>


***.aspx.cs:
#region 权限绑定
private void PowersBind()
{
int StartIndex = CurrentPage * PageSize;
Users users = new Users();
DataSet ds = users.GetManagerPower(StartIndex, PageSize, "Users");
this.GridView1.DataSource = ds.Tables["Users"].DefaultView;
this.GridView1.DataBind();

for (int i = 0; i < ds.Tables["Users"].Rows.Count; i++)
{
//浏览
if (DataAccessHelper.GetSafeData.ValidateDataRow_I(ds.Tables["Users"].Rows[i], "powers_View") == 1)
((CheckBox)GridView1.Rows[i].FindControl("powersView")).Checked = true;

//查询
if (DataAccessHelper.GetSafeData.ValidateDataRow_I(ds.Tables["Users"].Rows[i], "powers_Search") == 1)
((CheckBox)GridView1.Rows[i].FindControl("powersSearch")).Checked = true;

//添加
if (DataAccessHelper.GetSafeData.ValidateDataRow_I(ds.Tables["Users"].Rows[i], "powers_Add") == 1)
((CheckBox)GridView1.Rows[i].FindControl("powersAdd")).Checked = true;

//修改
if (DataAccessHelper.GetSafeData.ValidateDataRow_I(ds.Tables["Users"].Rows[i], "powers_Modi") == 1)
((CheckBox)GridView1.Rows[i].FindControl("powersModi")).Checked = true;

//删除
if (DataAccessHelper.GetSafeData.ValidateDataRow_I(ds.Tables["Users"].Rows[i], "powers_Del") == 1)
((CheckBox)GridView1.Rows[i].FindControl("powersDel")).Checked = true;

//审批
if (DataAccessHelper.GetSafeData.ValidateDataRow_I(ds.Tables["Users"].Rows[i], "powers_Check") == 1)
((CheckBox)GridView1.Rows[i].FindControl("powersCheck")).Checked = true;

//移动
if (DataAccessHelper.GetSafeData.ValidateDataRow_I(ds.Tables["Users"].Rows[i], "powers_Move") == 1)
((CheckBox)GridView1.Rows[i].FindControl("powersMove")).Checked = true;
}

this.PreviousLB.Enabled = true;
this.NextLB.Enabled = true;
if (CurrentPage == (PageCount - 1)) this.NextLB.Enabled = false;//当为最后一页时,下一页链接按钮不可用
if (CurrentPage == 0) this.PreviousLB.Enabled = false;//当为第一页时,上一页按钮不可用
this.CurrentLbl.Text = (CurrentPage + 1).ToString();//当前页数
}
#endregion
#region 权限分配
protected void submit_Click(object sender, ImageClickEventArgs e)
{
Hashtable ht = new Hashtable();
string where = "";
bool success=false;
foreach (GridViewRow row in GridView1.Rows)
{
int index = row.RowIndex;
DataKey key = this.GridView1.DataKeys[index];//获取主键
int customer_Id = Convert.ToInt32(key.Values["powers_Id"]);
ht.Clear();
ht.Add("powers_View", ((CheckBox)row.FindControl("powersView")).Checked == true ? 1 : 0);
ht.Add("powers_Search", ((CheckBox)row.FindControl("powersSearch")).Checked == true ? 1 : 0);
ht.Add("powers_Add", ((CheckBox)row.FindControl("powersAdd")).Checked == true ? 1 : 0);
ht.Add("powers_Modi", ((CheckBox)row.FindControl("powersModi")).Checked == true ? 1 : 0);
ht.Add("powers_Del", ((CheckBox)row.FindControl("powersDel")).Checked == true ? 1 : 0);
ht.Add("powers_Check", ((CheckBox)row.FindControl("powersCheck")).Checked == true ? 1 : 0);
ht.Add("powers_Move", ((CheckBox)row.FindControl("powersMove")).Checked == true ? 1 : 0);
ht.Add("powers_Created",SQLStringFormat.GetQuotedString(Session ["users_Name"].ToString ()));
ht.Add("powers_CreateTime", SQLStringFormat.GetQuotedString(DateTime.Now.ToString()));
where = " Where powers_Id=" + customer_Id;
Users users = new Users();
success= users.PowersUpdate(ht,where);
PowersBind();
}
if (success == true)
{
ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "click", "alert('权限分配成功!')", true);
}
else
{
ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "click", "alert('权限分配失败!')", true);
}
}
#endregion
hfljy_2008 2008-11-24
  • 打赏
  • 举报
回复
protected void GridView1_DataBound(object sender, EventArgs e)
{
int num;
string T_ID;
string comm1,comm2;
SqlCommand myComm;
SqlConnection myConn = DBConn.ConnectionDB();
CheckBox checkbox1 = this.GridView1.FindControl("checkbox1") as CheckBox;
CheckBox checkbox2 = this.GridView1.FindControl("checkbox2") as CheckBox;
for (int i = 0; i < this.GridView1.Rows.Count; i++)
{
T_ID = this.GridView1.Rows[i].Cells[0].Text;
comm1 = "select count(*) from UserInRole where T_ID=" + T_ID + "and RoleID=6";
comm2 = "select count(*) from UserInRole where T_ID=" + T_ID + "and RoleID=4";
myComm = new SqlCommand(comm1, myConn);
myConn.Open();
num = (int)myComm.ExecuteScalar();
if (num > 0)
{
checkbox1.Checked = true;
}
else
{
checkbox1.Checked = false;
}
myComm = new SqlCommand(comm2, myConn);
num = (int)myComm.ExecuteScalar();
if (num > 0)
{
checkbox2.Checked = true;
}
else
{
checkbox2.Checked = false;
}
myConn.Close();

}

}

我这样写了,但是为什么会出现错误,说未将对象引用设置到对象的实例
但是只要我把
else
{
checkbox2.Checked = false;
}
给删了,那就没有错误了,为什么?
hfljy_2008 2008-11-24
  • 打赏
  • 举报
回复
if (e.Row.RowType == DataControlRowType.DataRow)是什么意思?
yanlan112 2008-11-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 oec2003 的回复:]
1 添加checkboxfield列 绑定到数据库的一个bool字段

2 将checkboxfield 转换成模板列 在gridview的rowdatabound 事件中

C# code
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
CheckBox cb = e.Row.FindControl("CheckBox1") as CheckBox;
if (e.Row.RowIndex % 2 == 0) /…
[/Quote]

正解
oec2003 2008-11-23
  • 打赏
  • 举报
回复
如果楼主要在点加checkbox时就改变数据库状态
1 设置checbox的autopostback属性为 true

2 在checbox 的CheckedChanged事件写如下代码


protected void CheckBox1_CheckedChanged(object sender, EventArgs e)
{
CheckBox cb = sender as CheckBox;

GridViewRow dvr = cb.Parent.Parent as GridViewRow;

string id = dvr.Cells[1].Text; //取出该行的主键

string sql = "update [table] set state=" + cb.Checked + " where id=" + id;

//执行数据库操作
}
oec2003 2008-11-23
  • 打赏
  • 举报
回复
1 添加checkboxfield列 绑定到数据库的一个bool字段

2 将checkboxfield 转换成模板列 在gridview的rowdatabound 事件中

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
CheckBox cb = e.Row.FindControl("CheckBox1") as CheckBox;
if (e.Row.RowIndex % 2 == 0) //这儿换成你的权限
{
cb.Checked = true;
}
else
{
cb.Checked = false;
}
}
}

lutianling521 2008-11-23
  • 打赏
  • 举报
回复
dingjian2008 2008-11-23
  • 打赏
  • 举报
回复
可以使用模板列
<asp:TemplateField HeaderText="选择">
<ItemTemplate>
<asp:CheckBox ID="ChkItem" runat="server" />
</ItemTemplate>
<ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" Width="100px" />
</asp:TemplateField>

for (int i = 0; i < this.GVCell.Rows.Count; i++)
{
string id = this.GVCell.Rows[i].Cells[1].Text;
CheckBox cb = this.GVCell.Rows[i].FindControl("ChkItem") as CheckBox;
if (cb.Checked)
{
//操作
}
}

62,269

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧