需要单击该按钮两次才能编辑和更新网格视图数据



在我的应用程序中,我需要在单击该特定行的编辑按钮时编辑网格视图行,一切正常 编辑更新和取消问题是当我单击编辑按钮时,我的网格视图再次消失以查看网格视图,我应该单击下面的按钮

<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" /> 同样,更新后我的网格视图消失了,但更新发生了,所以要再次看到网格视图,我应该再次单击上面的按钮获取上传的数据,最后为了编辑网格视图数据,我需要单击按钮两次,为了再次查看更新的数据,我需要单击按钮两次。我该如何解决这个问题

<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 Name=@Name,Salary=@Salary,Designation=@Designation,Location=@Location where ID=@ID";
        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,通过在 !ispostback 中调用我的 gridview2.databind 此外,我也将我的网格视图放在更新面板中,但仍然不起作用

在GridView2_RowUpdating中,您正在更新数据库上的数据并将 GridView2 绑定到任何内容。这就是网格视图消失的原因。它没有数据可以显示。当您单击的按钮提取更新的数据并将其绑定到 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();

或者在更新后通过方法调用按钮中的代码。如果这有效,请尝试此操作。

根据您粘贴到注释中的代码,问题出在Page_Load事件处理程序上。 设置 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 跨回发维护。 从那时起,您的控件事件似乎正在管理网格的可见性(基于是否有要显示的结果等(。

最新更新