private void Mydg_UpdateCommand(object source,System.Web.UI.WebControls.DataGridCommandEventArgs e)
{ SqlConnection myConnection=new SqlConnection(SQLCONNECTIONSTRING);
string strSQL="Update Raises Set NewSalary=@NewSalary,TakeEffectDate=@TakeEffectDate,Behave=@Behave,Re=@Re,Effect=@Effect Where ViewOrder=@ViewOrder";
SqlCommand myCommand=new SqlCommand(strSQL,myConnection);

myConnection.Open();

myCommand.Parameters.Add(new SqlParameter("@ViewOrder",SqlDbType.Int));
myCommand.Parameters.Add(new SqlParameter("@NewSalary",SqlDbType.Decimal,2));
myCommand.Parameters.Add(new SqlParameter("@TakeEffectDate",SqlDbType.DateTime));
myCommand.Parameters.Add(new SqlParameter("@Behave",SqlDbType.VarChar,50));
myCommand.Parameters.Add(new SqlParameter("@Re",SqlDbType.VarChar,50));
myCommand.Parameters.Add(new SqlParameter("@Effect",SqlDbType.VarChar,10));
myCommand.Parameters["@NewSalary"].Value=((TextBox)e.Item.Cells[7].Controls[1]).Text;
myCommand.Parameters["@TakeEffectDate"].Value=((TextBox)e.Item.Cells[8].Controls[1]).Text;
myCommand.Parameters["@Behave"].Value=((TextBox)e.Item.Cells[9].Controls[1]).Text;
myCommand.Parameters["@Re"].Value=((TextBox)e.Item.Cells[10].Controls[1]).Text;
myCommand.Parameters["@Effect"].Value=((RadioButtonList)e.Item.Cells[11].Controls[1]).SelectedValue;
myCommand.Parameters["@ViewOrder"].Value=((Label)e.Item.Cells[0].Controls[1]).Text;
//Convert.ToString(int.Parse(e.Item.ItemIndex.ToString())+1); 这句在利用了页面提交后,更新数据时异常.
myCommand.ExecuteNonQuery();
Mydg.EditItemIndex=-1;
myConnection.Close();
BindDataGrid();
}如果Effect=1时,提示不能更新.怎么做呢?我试过像下面这样做.做一个判断:
string effect = ((RadioButtonList)e.Item.Cells[11].Controls[1]).SelectedValue
if(effect == "1")
{
Response.Write("<script>alert('error!)</script>");
}
但用了这个判断后,须然Effect开始时并不为"1",但只要我更新为"1"后,就弹出提示了.我不要这样.判断那里应该怎样写?谢谢!

解决方案 »

  1.   

    我有一个DataGrid实现了在线编辑的功能,里面有一项目为:Effect
    读取DataGrid后,Effect如果为1的话,就提示此条记录不能修改.
      

  2.   

    if(effect == "1")
    {
    Response.Write("<script>alert('error!)</script>");
    effect=0;
    }
      

  3.   

    所有代码:using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    using System.Data.SqlClient;
    using System.Configuration;namespace Raises.Page
    {
    /// <summary>
    /// QueryRaise 的摘要说明。
    /// </summary>
    public class QueryRaise : System.Web.UI.Page
    {
    protected System.Web.UI.WebControls.DataGrid Mydg;
    protected System.Web.UI.WebControls.LinkButton PageFirst;
    protected System.Web.UI.WebControls.LinkButton PagePrev;
    protected System.Web.UI.WebControls.LinkButton PageNext;
    protected System.Web.UI.WebControls.LinkButton PageLast;
    private readonly string SQLCONNECTIONSTRING=ConfigurationSettings.AppSettings["SQLCONNECTIONSTRING"].ToString(); private void BindDataGrid()
    {
    SqlConnection myConnection = new SqlConnection(SQLCONNECTIONSTRING);
    string sqlstr = "Select * from Raises";
    SqlCommand myCommand = new SqlCommand(sqlstr,myConnection);
    myConnection.Open();
    SqlDataAdapter da = new SqlDataAdapter(myCommand);
    DataSet ds = new DataSet();
    da.Fill(ds);
    Mydg.DataSource = ds;
    Mydg.DataBind();
    myConnection.Close();
    } private void Mydg_PageIndexChanged(object source,System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
    {
    Mydg.CurrentPageIndex = e.NewPageIndex;
    BindDataGrid();
    }

    private void PageCut_Click(object sender,System.EventArgs e)
    {
    string commangArg=((LinkButton)sender).CommandArgument;
    switch(commangArg)
    {
    case "First":{Mydg.CurrentPageIndex = 0;break;}
    case "Prev":{Mydg.CurrentPageIndex = (int)Math.Max(0,Mydg.CurrentPageIndex - 1);break;}
    case "Next":{Mydg.CurrentPageIndex = (int)Math.Min(Mydg.PageCount - 1,Mydg.CurrentPageIndex + 1);break;}
    case "Last":{Mydg.CurrentPageIndex = Mydg.PageCount - 1;break;}
    default:{break;}
    }
    BindDataGrid();
    IsFirstLastPage();
    }
    private void IsFirstLastPage()
    {
    if(Mydg.PageCount > 0)
    {
    if(Mydg.PageCount != 1)
    {
    if(Mydg.CurrentPageIndex == 0)
    {
    PagePrev.Enabled = false;
    }
    else
    {
    PagePrev.Enabled = true;
    }
    if(Mydg.CurrentPageIndex == Mydg.PageCount -1)
    {
    PageNext.Enabled = false;
    }
    else
    {
    PageNext.Enabled = true;
    }
    }
    else
    {
    PagePrev.Enabled = false;
    PageNext.Enabled = false;
    }
    }
    else
    {
    PageFirst.Enabled = false;
    PageLast.Enabled = false;
    PageNext.Enabled = false;
    PagePrev.Enabled = false;
    }
    }
    private void Mydg_EditCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
    Mydg.EditItemIndex=(int)e.Item.ItemIndex;
    Mydg.DataBind();
    BindDataGrid(); } private void Mydg_CancelCommand(object source,System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
    Mydg.EditItemIndex=-1;
    BindDataGrid();
    } private void Mydg_UpdateCommand(object source,System.Web.UI.WebControls.DataGridCommandEventArgs e)
    { SqlConnection myConnection=new SqlConnection(SQLCONNECTIONSTRING);
    string strSQL2="select Effect from raises where ViewOrder=@ViewOrder";
    string strSQL="Update Raises Set NewSalary=@NewSalary,TakeEffectDate=@TakeEffectDate,Behave=@Behave,Re=@Re,Effect=@Effect Where ViewOrder=@ViewOrder";
    SqlCommand myCommand=new SqlCommand(strSQL,myConnection);
    myConnection.Open(); myCommand.Parameters.Add(new SqlParameter("@ViewOrder",SqlDbType.Int));
    myCommand.Parameters.Add(new SqlParameter("@NewSalary",SqlDbType.Decimal,2));
    myCommand.Parameters.Add(new SqlParameter("@TakeEffectDate",SqlDbType.DateTime));
    myCommand.Parameters.Add(new SqlParameter("@Behave",SqlDbType.VarChar,50));
    myCommand.Parameters.Add(new SqlParameter("@Re",SqlDbType.VarChar,50));
    myCommand.Parameters.Add(new SqlParameter("@Effect",SqlDbType.VarChar,10));
    myCommand.Parameters["@NewSalary"].Value=((TextBox)e.Item.Cells[7].Controls[1]).Text;
    myCommand.Parameters["@TakeEffectDate"].Value=((TextBox)e.Item.Cells[8].Controls[1]).Text;
    myCommand.Parameters["@Behave"].Value=((TextBox)e.Item.Cells[9].Controls[1]).Text;
    myCommand.Parameters["@Re"].Value=((TextBox)e.Item.Cells[10].Controls[1]).Text;
    myCommand.Parameters["@Effect"].Value=((RadioButtonList)e.Item.Cells[11].Controls[1]).SelectedValue;
    myCommand.Parameters["@ViewOrder"].Value=((Label)e.Item.Cells[0].Controls[1]).Text;
    //Convert.ToString(int.Parse(e.Item.ItemIndex.ToString())+1); 这句在利用了页面提交后,更新数据时异常.
    myCommand.ExecuteNonQuery();
    Mydg.EditItemIndex=-1;
    myConnection.Close();
    BindDataGrid();
    } private void Page_Load(object sender, System.EventArgs e)
    {
    if(!Page.IsPostBack)
    {
    BindDataGrid();
    IsFirstLastPage();
    }
    } #region Web 窗体设计器生成的代码
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
    //
    InitializeComponent();
    base.OnInit(e);
    }

    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {    
    this.Mydg.PageIndexChanged += new System.Web.UI.WebControls.DataGridPageChangedEventHandler(this.Mydg_PageIndexChanged);
    this.Mydg.CancelCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.Mydg_CancelCommand);
    this.Mydg.EditCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.Mydg_EditCommand);
    this.Mydg.UpdateCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.Mydg_UpdateCommand);
    this.PageFirst.Click += new System.EventHandler(this.PageCut_Click);
    this.PagePrev.Click += new System.EventHandler(this.PageCut_Click);
    this.PageNext.Click += new System.EventHandler(this.PageCut_Click);
    this.PageLast.Click += new System.EventHandler(this.PageCut_Click);
    this.Load += new System.EventHandler(this.Page_Load); }
    #endregion
    }
    }
      

  4.   

    有数据类型不匹配
    myCommand.Parameters.Add(new SqlParameter("@TakeEffectDate",SqlDbType.DateTime));myCommand.Parameters["@TakeEffectDate"].Value=((TextBox)e.Item.Cells[8].Controls[1]).Text;
    其他的还没看,可能还有,楼主仔细查一查
      

  5.   

    不,不是这样的.是可以更新的.但我想这样:既然Effect已经为1了,这条记录就不能够修改.
    myCommand.Parameters.Add(new SqlParameter("@TakeEffectDate",SqlDbType.DateTime));myCommand.Parameters["@TakeEffectDate"].Value=((TextBox)e.Item.Cells[8].Controls[1]).Text;
    这句的数据类型怎样匹配呢?我运行起来没出错.
    我只想如果某条记录的Effect值为1时,就不能修改这条记录
      

  6.   

    行了:
    private void Mydg_CheckEffect(object sender,System.Web.UI.WebControls.DataGridItemEventArgs e)
    {
    if(e.Item.ItemIndex > -1)
    {
    DataRowView row = (DataRowView)e.Item.DataItem;
    if(row["Effect"].ToString() == "1")
    {
    LinkButton lbtnEdit = e.Item.Cells[13].Controls[1] as LinkButton;
    LinkButton lbtnDelete = e.Item.Cells[14].Controls[1] as LinkButton;
    lbtnEdit.Enabled = false;
    lbtnDelete.Enabled = false;
    }
    }