日期:2014-05-18  浏览次数:20462 次

求助,GridView中动态切换审核开关的方法
现在有一个GridView,审核部分用的是
ButtonField   CommandName= "yes "   Text= "通过审核 "
ButtonField   CommandName= "no "   Text= "取消审核 "

大概如下

    标题           发布者         发布日期         编辑       删除        
    作品1         leee           2007-5-10         编辑       删除         通过审核     取消审核    


我想实现如果是已经审核的行,就只显示“取消审核”
  而未审核的,就显示“通过审核”,并切根据显示内容的不同,完成通过/取消的操作

      作品1         leee           2007-5-10         编辑       删除         取消审核
      作品2         sde             2007-5-12         编辑       删除         通过审核


我刚开始学,希望指点一下,最好给个相对完整点的代码片段(前台+cs代码),好研究一下,谢谢了

------解决方案--------------------
请实现 grdPro_RowCommand 方法具体逻辑,
这里,假设你的“审核字段”只有二元值(如非1即0),因此更新的时候采取了技巧:
"UPDATE Product SET Reviewed = (CASE Reviewed = 1 WHEN 0 ELSE 1 END) WHERE ProductId = @ProductId ";

若是其他类型,请自行做响应修改

同时提供 CheckBox 示例

另外,你也可以设计两个Button,一个做通过,一个做取消,然后设定其Visible属性,


<%@ Page Language= "C# " %>
<%@ Import Namespace= "System.Data " %>

<%--
http://community.csdn.net/Expert/topic/5590/5590084.xml?temp=3.222293E-02
--%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN " "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">

<script runat= "server ">
void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack) {
// 首次加载数据一定要放在 !IsPostBack 内,
// 避免回发的时候再次绑定数据,覆盖复选框状态
LoadProductData();
}
}

void chk_CheckedChanged(object sender, EventArgs e)
{
// 触发此事件的 CheckBox
CheckBox chk = sender as CheckBox;
// 得到 CheckBox 所在行
GridViewRow row = chk.NamingContainer as GridViewRow;
// 得到 GridView,当然这里可以直接引用控件ID
GridView grd = row.NamingContainer as GridView;
// 得到主键
int productId = (int)grd.DataKeys[row.RowIndex].Value;
// more codes
// ...
System.Diagnostics.Debug.Assert(false, productId.ToString());
Response.Write(row.RowIndex);
}

void grdPro_RowCommand(object sender, GridViewCommandEventArgs e)
{
switch (e.CommandName) {
case "Review ":
// 触发此事件的 Button
Button btnReview = e.CommandSource as Button;
// 得到 Button 所在行
GridViewRow row = btnReview.NamingContainer as GridViewRow;
// 得到 GridView,当然这里可以直接引用控件ID
GridView grd = row.NamingContainer as GridView;
int productId = (int)grd.DataKeys[row.RowIndex].Value;
// comment the line below in your release verion
Response.Write(productId);
// your more codes
// in your case, maybe take the update sql as following: