2011-04-10 6 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. 이하이지만, 기록은 업데이트되지 않는 db에 새로운 레코드로 추가되었습니다. 나는 내가 업데이트 스크립트를 작성한다고 생각하고있다. 그러나 그것을 어디에 써야할까요?

아래의 코드는 동일합니다.

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가 아니면 레코드를 삽입합니다. 이것은 설명 된 문제입니다. –

+0

@ Justin : 입력 해 주셔서 감사합니다. IsEdit는 true 일 때 레코드를 업데이트해야하는 bool 변수입니다. 편집 이벤트가 호출되면 true로 설정됩니다 (코드 스 니펫 # 1 -> 마지막 행). 내 문제 : 상태가 항상 거짓으로 나타납니다. –

+0

IsEdit 조건이 충족되고 컴파일러가 업데이트 블록으로 이동하면 나머지 코드는 정상입니까? 값이 사용자로부터 업데이트 쿼리로 입력되지 않습니까? –

답변

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가 쿼리를 업데이트하도록 설정되었을 때 나머지 코드는 같을까요? –

+0

네, 그렇게 생각하지 않습니다. 기존 코드에서 어떤 것을 변경해야합니다. 나에게 괜찮은 것 같다. 행운을 빕니다 :) –

관련 문제