在我的应用程序中,我需要编辑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 Code
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!!!"; }
}
我已经尝试了所有的可能性,通过调用我的gridview2.databind在!ispostback中使用editindex = 0而不是-1,而且我已将gridview放在更新面板中但仍然无法正常工作
答案 0 :(得分: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将在回发后维护该设置。从那时起,您的控制事件似乎正在管理网格的可见性(基于是否有结果显示等)。
答案 1 :(得分:0)
在GridView2_RowUpdating中,您将更新数据库中的数据并将GridView2绑定为空。这就是GridView消失的原因。它没有数据显示。当您单击的按钮获取更新的数据并将其绑定到GridView,这就是它再次显示的原因。更新数据时,应该获取更新的数据并再次将其重新绑定到GridView。
我建议在调用GridView2.DataBind();
之前使用DataSet并指定为DatasourceSqlDataAdapter 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();
或者在更新后通过方法调用按钮中的代码。 如果有效,请尝试此操作。