2011-04-10 138 views
2

下面2个链接给我的示例应用程序的预览。如何在asp.net应用程序中实现编辑功能?

http://img812.imageshack.us/i/image1adl.jpg/:显示我的示例应用程序。所有字段都是自解释性的(如果查询,请让我知道)

http://img834.imageshack.us/i/image2vc.jpg/:显示,当点击网格中的“编辑”按钮时,时序显示正确,但顺序受到干扰。 (见上面的7点,然后看到时间表)。

我的问题

  1. 如何纠正时序问题? (链接2)

守则“编辑”低于

protected void lnkEdit_Click(object sender, EventArgs e) 
{ 
    int imageid = Convert.ToInt16((sender as Button).CommandArgument); 

    DataSet ds = new DataSet(); 

    SqlConnection sqlconn = new SqlConnection(); 
    sqlconn.ConnectionString = ConfigurationManager.ConnectionStrings["TestConn"].ConnectionString; 
    string sql = @"SELECT * FROM Images WHERE IsDeleted=0 and Imageid='"+ imageid +"'"; 

    SqlCommand sqlcommand = new SqlCommand(sql, sqlconn); 
    sqlcommand.CommandType = CommandType.Text; 
    sqlcommand.CommandText = sql; 

    SqlDataAdapter da = new SqlDataAdapter(sqlcommand); 
    da.Fill(ds); 

    if (ds.Tables[0].Rows.Count > 0) 
    { 
     txtImageName.Text = ds.Tables[0].Rows[0].ItemArray[1].ToString(); 
     chkIsActive.Checked = Convert.ToBoolean(ds.Tables[0].Rows[0]["IsActive"].ToString()); 
     ddlStartTime.DataSource = ds; 
     ddlStartTime.DataTextField = ds.Tables[0].Columns["StartTime"].ColumnName.ToString(); 
     ddlStartTime.DataValueField = ds.Tables[0].Columns["ImageId"].ColumnName.ToString(); 
     ddlStartTime.DataBind(); 
     ddlEndTime.DataSource = ds; 
     ddlEndTime.DataTextField = ds.Tables[0].Columns["EndTime"].ColumnName.ToString(); 
     ddlEndTime.DataValueField = ds.Tables[0].Columns["ImageId"].ColumnName.ToString(); 
     ddlEndTime.DataBind(); 
     BindDropDownList(); 
     IsEdit = true; 
    } 
  1. 当我编辑在网格中,我得到的值的现有记录,但记录未更新但作为一个新的记录添加到数据库。我知道我想写更新脚本。但是在哪里写?

下面的代码是相同的;

protected void btnSubmit_Click(object sender, EventArgs e) 
{ 
    if (Page.IsPostBack) 
    { 
     try 
     { 
      string strImageName = txtImageName.Text.ToString(); 
      int IsActive = 1; 
      if (chkIsActive.Checked) 
       IsActive = 1; 
      else 
       IsActive = 0; 

      string startDate = ddlStartTime.SelectedItem.Text; 
      string endDate = ddlEndTime.SelectedItem.Text; 

      if (Convert.ToDateTime(endDate) - Convert.ToDateTime(startDate) > new TimeSpan(2, 0, 0) || Convert.ToDateTime(endDate)- Convert.ToDateTime(startDate) < new TimeSpan(2,0,0)) 
      { 
       //Response.Write(@"<script language='javascript'> alert('Difference between Start Time and End Time is 2 hours'); </script> "); 
       lblHours.Visible = true; 
       lblHours.Text = "Difference between Start Time and End Time should be 2 hours"; 
       return; 
      } 

      if (checkConflictTime()) 
      { 
       lblMessage.Visible = true; 
       lblMessage.Text = "Time Conflict"; 
       return; 
      } 

      //if (checkTimeBetween()) 
      //{ 
      //} 

      if (fuFileUpload.PostedFile != null && fuFileUpload.PostedFile.FileName != "") 
      { 
       lblHours.Visible = false; 
       byte[] imageSize = new Byte[fuFileUpload.PostedFile.ContentLength]; 
       HttpPostedFile uploadedImage = fuFileUpload.PostedFile; 
       uploadedImage.InputStream.Read(imageSize, 0, (int)fuFileUpload.PostedFile.ContentLength); 

       SqlConnection sqlconn = new SqlConnection(); 
       sqlconn.ConnectionString = ConfigurationManager.ConnectionStrings["TestConn"].ConnectionString; 

       SqlCommand cmd = new SqlCommand(); 
       if (IsEdit == false) 
       { 
        cmd.CommandText = "Insert into Images(FileName,FileContent,IsDeleted,IsActive,StartTime,EndTime) values (@img_name, @img_content,@IsDeleted,@IsActive,@StartTime,@EndTime)"; 
       } 
       else 
       { 
        cmd.CommandText = "Update Images set [email protected]_name, [email protected]_content, IsDeleted= @IsDeleted,IsActive= @IsActive, [email protected],[email protected]"; 
       } 
       cmd.CommandType = CommandType.Text; 
       cmd.Connection = sqlconn; 

       SqlParameter ImageName = new SqlParameter("@img_name", SqlDbType.NVarChar, 50); 
       ImageName.Value = strImageName.ToString(); 
       cmd.Parameters.Add(ImageName); 

       SqlParameter ActualImage = new SqlParameter("@img_content", SqlDbType.VarBinary); 
       ActualImage.Value = imageSize; 
       cmd.Parameters.Add(ActualImage); 

       SqlParameter DeletedImage = new SqlParameter("@IsDeleted", SqlDbType.Bit); 
       DeletedImage.Value = 0; 
       cmd.Parameters.Add(DeletedImage); 

       SqlParameter IsActiveCheck = new SqlParameter("@IsActive", SqlDbType.Bit); 
       IsActiveCheck.Value = IsActive; 
       cmd.Parameters.Add(IsActiveCheck); 

       SqlParameter StartDate = new SqlParameter("@StartTime", SqlDbType.NVarChar, 100); 
       StartDate.Value = startDate; 
       cmd.Parameters.Add(StartDate); 

       SqlParameter EndDate = new SqlParameter("@EndTime", SqlDbType.NVarChar, 100); 
       EndDate.Value = endDate; 
       cmd.Parameters.Add(EndDate); 

       sqlconn.Open(); 
       int result = cmd.ExecuteNonQuery(); 
       sqlconn.Close(); 

       if (result > 0) 
       { 
        lblMessage.Visible = true; 
        lblMessage.Text = "File Uploaded!"; 
        gvImages.DataBind(); 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      lblMessage.Text = ex.ToString(); 
     } 
    } 

} 

请帮忙!

+1

我会逐步执行代码,看看有什么IsEdit的价值出来作为开始。如果它不等于False,那么你插入一条记录,这是你描述的问题。 – 2011-04-10 15:37:24

+0

@Justin:感谢您的参与。 IsEdit只不过是一个布尔变量,当真正应该更新记录。当编辑事件被调用时(在代码片段#1 - >最后一行),它被设置为true。我的问题:这种情况总是出现错误。 – 2011-04-10 15:56:57

+0

想象一下,如果IsEdit条件成立,并且编译器去更新数据块,那么写入其中的代码的其余部分是否可以正常工作?这些值不会从用户输入到更新查询中吗? – 2011-04-10 15:58:51

回答

1

你在哪里定义Bool/Bolean IsEdit?我认为它的值在页面回发时被重置,这就是为什么它始终是false并且正在插入记录。我建议你使用隐藏字段来追踪这个值,并在那里设置它的值并在插入/更新时检查值。最后,它会是这样的......

if (ds.Tables[0].Rows.Count > 0) 
{ 
    //your code 
    hiddenField.Value = "true"; // you can set default value to false 
} 

再经过

if (hiddenField.Value == "false") 
    { 
    cmd.CommandText = "Insert into Images(FileName,FileContent,IsDeleted,IsActive,StartTime,EndTime) values (@img_name, @img_content,@IsDeleted,@IsActive,@StartTime,@EndTime)"; 
    } 
    else 
    { 
    cmd.CommandText = "Update Images set [email protected]_name, [email protected]_content, IsDeleted= @IsDeleted,IsActive= @IsActive, [email protected],[email protected]"; 
    } 
+0

@Akhtar:是的!我相信这可能是因为回传。 一个小问题:当commandtext被设置为更新查询时,剩下的代码是否会相同? – 2011-04-10 16:35:31

+0

是的,我不这么认为,你需要改变现有代码中的任何东西。这对我来说似乎是好的。祝你好运 :) – 2011-04-10 16:55:55

相关问题