2017-05-24 162 views
0

在我的應用程序中,我需要編輯gridview行點擊該特定行的編輯按鈕一切工作正常編輯更新和取消問題是當我點擊編輯按鈕我的GridView中再次消失,看看在GridView需要點擊按鈕兩次編輯和更新gridview數據

<asp:Button ID="Button1" runat="server" style="border:1px solid #456879;border-radius:5px;height: 22px;Width:150px" OnClick="Button1_Click" Text="Get Uploaded Data" Width="132px" /> ,同樣更新我的GridView消失後,我應該點擊下面的按鈕,但更新發生如此再次看到GridView的,我應該再次點擊上面的按鈕獲取上傳了數據,最後以編輯gridview數據我需要點擊按鈕兩次,爲了再次看到更新的數據我需要點擊按鈕兩次。我可以如何解決這個問題

<asp:GridView ID="GridView2" runat="server" CellPadding="3" Font-Size="12px" Width="300px" Visible="false" OnRowEditing="GridView2_RowEditing" OnRowUpdating="GridView2_RowUpdating" OnRowCommand="GridView2_RowCommand" OnRowCancelingEdit="GridView2_RowCancelingEdit" AutoGenerateColumns="False" BackColor="White" BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px"> 
        <Columns> 
         <asp:TemplateField HeaderText="Action"> 
         <ItemTemplate> 
          <asp:ImageButton ID="imgbtnEdit" runat="server" CommandName="Edit" ImageUrl="Images/icon-edit.png" Height="32px" Width="32px"/> 
         </ItemTemplate> 
         <EditItemTemplate> 
          <asp:ImageButton ID="imgbtnUpdate" runat="server" CommandName="Update" ImageUrl="Images/update1.jpg"/> 
          <asp:ImageButton ID="imgbtnCancel" runat="server" CommandName="Cancel" ImageUrl="Images/cancel.jpg"/> 
         </EditItemTemplate> 
        </asp:TemplateField>    
         <asp:templatefield headertext="sno"> 
         <itemtemplate> 
          <asp:label id="lblid" runat="server" text='<%#DataBinder.Eval(Container.DataItem, "ID") %>'></asp:label> 
         </itemtemplate> 
         <edititemtemplate>   
          <asp:label id="lbleditid" runat="server" text='<%#DataBinder.Eval(Container.DataItem, "ID") %>'></asp:label>   
         </edititemtemplate> 
        </asp:templatefield>  
         <asp:TemplateField HeaderText="Name"> 
         <ItemTemplate> 
          <asp:Label ID="lblName" runat="server" Text='<%#DataBinder.Eval(Container.DataItem, "Name") %>'></asp:Label> 
         </ItemTemplate> 
         <EditItemTemplate>   
          <asp:TextBox ID="txtEditName" runat="server" Text='<%#DataBinder.Eval(Container.DataItem, "Name") %>'></asp:TextBox>   
         </EditItemTemplate> 
        </asp:TemplateField> 
          <asp:TemplateField HeaderText="Salary"> 
         <ItemTemplate> 
          <asp:Label ID="lblSalary" runat="server" Text='<%#DataBinder.Eval(Container.DataItem, "Salary") %>'></asp:Label> 
         </ItemTemplate> 
         <EditItemTemplate>   
          <asp:TextBox ID="txtEditSalary" runat="server" Text='<%#DataBinder.Eval(Container.DataItem, "Salary") %>'></asp:TextBox>   
         </EditItemTemplate> 
        </asp:TemplateField> 
          <asp:TemplateField HeaderText="Designation"> 
         <ItemTemplate> 
          <asp:Label ID="lblDesignation" runat="server" Text='<%#DataBinder.Eval(Container.DataItem, "Designation") %>'></asp:Label> 
         </ItemTemplate> 
         <EditItemTemplate>   
          <asp:TextBox ID="txtEditDesignation" runat="server" Text='<%#DataBinder.Eval(Container.DataItem, "Designation") %>'></asp:TextBox>   
         </EditItemTemplate> 
        </asp:TemplateField> 
          <asp:TemplateField HeaderText="Location"> 
         <ItemTemplate> 
          <asp:Label ID="lblLocation" runat="server" Text='<%#DataBinder.Eval(Container.DataItem, "Location") %>'></asp:Label> 
         </ItemTemplate> 
         <EditItemTemplate>   
          <asp:TextBox ID="txtEditLocation" runat="server" Text='<%#DataBinder.Eval(Container.DataItem, "Location") %>'></asp:TextBox>   
         </EditItemTemplate> 
        </asp:TemplateField> 
       </Columns>   
       </asp:GridView> 

.CS碼

protected void GridView2_RowEditing(object sender, GridViewEditEventArgs e) 
    { 
     GridView2.EditIndex = e.NewEditIndex; 
     GridView2.DataBind(); 
     GridView2.Visible = true; 

    } 
    protected void GridView2_RowUpdating(object sender, GridViewUpdateEventArgs e) 
    { 
     Label lblEditID = (Label)GridView2.Rows[e.RowIndex].FindControl("lblEditID"); 
     TextBox txtEditName = (TextBox)GridView2.Rows[e.RowIndex].FindControl("txtEditName"); 
     TextBox txtEditSalary = (TextBox)GridView2.Rows[e.RowIndex].FindControl("txtEditSalary"); 
     TextBox txtEditDesignation = (TextBox)GridView2.Rows[e.RowIndex].FindControl("txtEditDesignation"); 
     TextBox txtEditLocation = (TextBox)GridView2.Rows[e.RowIndex].FindControl("txtEditLocation"); 
     con.Open(); 
     string cmdstr = "update CodingLog1 set [email protected],[email protected],[email protected],[email protected] where [email protected]"; 
     SqlCommand cmd = new SqlCommand(cmdstr, con); 
     cmd.Parameters.AddWithValue("@ID", lblEditID.Text); 
     cmd.Parameters.AddWithValue("@Name", txtEditName.Text); 
     cmd.Parameters.AddWithValue("@Salary", txtEditSalary.Text); 
     cmd.Parameters.AddWithValue("@Designation", txtEditDesignation.Text); 
     cmd.Parameters.AddWithValue("@Location", txtEditLocation.Text); 
     cmd.ExecuteNonQuery(); 
     con.Close(); 
     GridView2.EditIndex = -1; 
     GridView2.Visible = true; 
     GridView2.DataBind(); 
    } 
    protected void GridView2_RowCommand(object sender, GridViewCommandEventArgs e) 
    { 

    } 
    protected void GridView2_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e) 
    { 
      GridView2.EditIndex = -1; 
      GridView2.Visible = true; 
      GridView2.DataBind(); 
    } 

代碼 -

protected void Button1_Click(object sender, EventArgs e) 
    { 
     GridView1.DataSource = null; GridView1.DataBind(); 
     string desi = Session["Role"].ToString(); 
     string user = Session["Username"].ToString(); 
     string selecteduser = ddlusers.SelectedItem.Text; 

     if (TextBox1.Text != "") 
     { 
      if (rdupldeddate.Checked == true) 
      { 
       DataTable dt = adm.GetRecordsByUploadedDate(user, TextBox1.Text, desi, selecteduser); //Uploaded date 

       if (dt.Rows.Count > 0) 
       { 
        if (desi == "Supervisor") 
        { 
         BtnExport.Visible = true; 
         GridView2.Visible = true; 
         GridView1.Visible = false; 
         GridView2.DataSource = dt; 
         GridView2.DataBind(); 
        } 
        else 
        { 
         GridView2.Visible = false; 
         BtnExport.Visible = false; 
         GridView1.Visible = true; 
         GridView1.DataSource = dt; 
         GridView1.DataBind(); 
        } 
       } 
       else { lblMsg.Visible = true; GridView1.Visible = false; GridView2.Visible = false; lblMsg.Text = "No Data Present!!!"; } 
      } 
      else 
      { 
       DataTable dt = adm.GetRecordsByCodedDate(user, TextBox1.Text, desi, selecteduser); //CodedDate 
       if (dt.Rows.Count > 0) 
       { 
        if (desi == "Supervisor") 
        { 
         BtnExport.Visible = true; 
         GridView2.Visible = true; 
         GridView1.Visible = false; 
         GridView2.DataSource = dt; 
         GridView2.DataBind(); 
        } 
        else 
        { 
         GridView2.Visible = false; 
         BtnExport.Visible = false; 
         GridView1.Visible = true; 
         GridView1.DataSource = dt; 
         GridView1.DataBind(); 
        } 
       } 
       else { lblMsg.Visible = true; GridView1.Visible = false; GridView2.Visible = false; lblMsg.Text = "No Data Present!!!"; } 
      } 
     } 
     else { lblMsg.Visible = true; lblMsg.Text = "Please Enter Date!!!"; } 

    } 

我已經採取editindex = 0,而不是-1嘗試了所有的possibilties按鈕,通過調用我的!的IsPostBack gridview2.databind此外,我已經把我的gridview更新面板也仍然不起作用

+0

你有'Page_Load'中的任何代碼來設置這兩個GridView的可見性嗎?如果是這樣,你可以顯示該代碼嗎? – jadarnel27

+0

下面是我的頁面加載代碼lblMsg.Text =「」; if(!IsPostBack) { BindUsers(); } string desi = Session [「Role」]。ToString(); if(desi ==「Supervisor」) { GridView2.Visible = true; GridView1.Visible = false; ddlusers.Visible = true; BtnExport.Visible = false; } else { GridView2.Visible = false; GridView1.Visible = true; ddlusers.Visible = false; BtnExport。Visible = false; } – abc

+0

根據指定我隱藏網格和頁面加載 – abc

回答

0

在您的GridView2_RowUpdating中,您正在更新數據庫上的數據並將GridView2綁定到任何內容。這就是爲什麼GridView消失。它沒有數據顯示。點擊按鈕時獲取更新的數據並將其綁定到GridView,這就是爲什麼它再次顯示。當您更新數據時,您應該獲取更新後的數據並重新將其重新綁定到您的GridView。

我建議使用DataSet並在調用GridView2.DataBind()之前指定爲Datasource。

SqlDataAdapter da = new SqlDataAdapter(cmdstr ,con); 
    da.SelectCommand.CommandType = CommandType.Text; 
    da.SelectCommand.Parameters.AddWithValue("@ID", lblEditID.Text); 
    da.SelectCommand.Parameters.AddWithValue("@Name", txtEditName.Text); 
    da.SelectCommand.Parameters.AddWithValue("@Salary", txtEditSalary.Text); 
    da.SelectCommand.Parameters.AddWithValue("@Designation", txtEditDesignation.Text); 
    da.SelectCommand.Parameters.AddWithValue("@Location", txtEditLocation.Text); 

DataSet dsResult = new DataSet(); 

da.Fill(dsResult); 
con.Close(); 

GridView2.DataSource = dsResult; 
GridView.DataBind(); 

或者更新後通過方法調用按鈕中的代碼。 試試這個,如果這個工程。

0

根據您粘貼到評論中的代碼,問題在於你的Page_Load事件處理程序。設置GridViews初始可見性的代碼應位於if (!IsPostBack)塊內。

lblMsg.Text = ""; 

if (!IsPostBack) 
{ 
    BindUsers(); 

    // Set the initial visibility of grids here 
    string desi = Session["Role"].ToString(); 

    if (desi == "Supervisor") 
    { 
     GridView2.Visible = true; 
     GridView1.Visible = false; 
     ddlusers.Visible = true; 
     BtnExport.Visible = false; 
    } 
    else 
    { 
     GridView2.Visible = false; 
     GridView1.Visible = true; 
     ddlusers.Visible = false; 
     BtnExport.Visible = false; 
    } 
} 

在第一次加載頁面時爲這些網格設置了可見性後,該設置將由ViewState在回發期間維護。從那時起,看起來你的控制事件正在管理網格的可見性(根據是否有結果顯示等)。

+0

必要的控制,但我仍然面臨同樣的問題 – abc