2017-05-24 17 views
0

私のアプリケーションでは、特定の行の編集ボタンをクリックするとグリッドビューの行を編集する必要があります。 GridViewのは、私がグリッドビューのデータを編集して更新するには、ボタンを2回クリックする必要があります。

<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のを見てとてもたまたまedit gridview data私はボタンを2回クリックし、更新されたデータを再度見るためにボタンを2回クリックする必要があります。私はこれを解決できますか?

<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!!!"; } 

    } 

コード - 私は私の中でgridview2.databindを呼び出すことで、代わりに-1のeditindex = 0を取ることによって、すべてのpossibiltiesを試してみました!IsPostBackプロパティまた、私は更新パネルにも私のgridviewを配置したが、まだ動作していない

+0

'Page_Load'には、これらの2つのGridViewの可視性を設定するコードがありますか?もしそうなら、そのコードを表示できますか? – jadarnel27

+0

は私のページです。load code lblMsg.Text = ""; if(!IsPostBack) { BindUsers(); } string desi =セッション["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に再バインドする必要があります。

GridView2.DataBind()を呼び出す前に、DataSetを使用してデータソースとして割り当てることをお勧めします。

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

コメントに貼り付けたコードに基づいて、問題はあなたのにある210イベントハンドラ。 GridViewの初期可視性を設定するコードは、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

関連する問題