我在页面上创建了一个gridview,我想在其中提供一个编辑按钮供用户点击。但问题是网格视图行只有在第二次单击编辑按钮时才可编辑。不知道这里出了什么问题,我们将不胜感激。
另外一点是我的网格视图仅在单击按钮时显示在页面上,因此不在page_load事件中。
发布代码段:
//我的Aspx代码
<Columns>
<asp:TemplateField HeaderText="Slice" SortExpression="name">
<ItemTemplate>
<asp:Label ID="lblslice" Text='<%# Eval("slice") %>' runat="server"></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:Label ID="lblslice" Text='<%# Eval("slice") %>' runat="server"></asp:Label>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Metric" SortExpression="Description">
<ItemTemplate>
<asp:Label ID="lblmetric" Text='<%# Eval("metric")%>' runat="server"></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:Label ID="lblmetric" Text='<%# Eval("metric")%>' runat="server"></asp:Label>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Original" SortExpression="Type">
<ItemTemplate>
<asp:Label ID="lbloriginal" Text='<%# Eval("Original")%>' runat="server"></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:Label ID="lbloriginal" Text='<%# Eval("Original")%>' runat="server"></asp:Label>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="WOW" SortExpression="Market">
<ItemTemplate>
<asp:Label ID="lblwow" Text='<%# Eval("WOW")%>' runat="server"></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:Label ID="lblwow" Text='<%# Eval("WOW")%>' runat="server"></asp:Label>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Change" SortExpression="Market" >
<ItemTemplate>
<asp:Label ID="lblChange" Text='<%# Eval("Change")%>' runat="server"></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="TxtCustomerID" Text='<%# Eval("Change") %> ' runat="server"></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:CommandField HeaderText="Edit" ShowEditButton="True" />
</Columns>
</asp:GridView>
//我的代码背后:
protected void Page_Load(object sender, EventArgs e)
{
}
public void populagridview1(string slice,string fromdate,string todate,string year)
{
SqlCommand cmd;
SqlDataAdapter da;
DataSet ds;
cmd = new SqlCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "usp_geteventchanges";
cmd.Connection = conn;
conn.Open();
SqlParameter param1 = new SqlParameter("@slice", slice);
cmd.Parameters.Add(param1);
SqlParameter param2 = new SqlParameter("@fromdate", fromdate);
cmd.Parameters.Add(param2);
SqlParameter param3 = new SqlParameter("@todate", todate);
cmd.Parameters.Add(param3);
SqlParameter param4 = new SqlParameter("@year", year);
cmd.Parameters.Add(param4);
da = new SqlDataAdapter(cmd);
ds = new DataSet();
da.Fill(ds, "Table");
GridView1.DataSource = ds;
GridView1.DataBind();
conn.Close();
}
protected void ImpactCalc(object sender, EventArgs e)
{
populagridview1(ddl_slice.SelectedValue, dt_to_integer(Picker1.Text), dt_to_integer(Picker2.Text), Txt_Year.Text);
}
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
gvEditIndex = e.NewEditIndex;
Gridview1.DataBind();
}
点击两次编辑后会出现此编辑屏幕。点击计算影响按钮时会显示网格视图。数据来自后端存储过程,该过程在单击“计算影响按钮”
时触发答案 0 :(得分:1)
您需要在编辑功能bind gridview
中再次致电GridView1_RowEditing
您需要按如下方式修改代码
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
gvEditIndex = e.NewEditIndex;
//call the function here
populagridview1(ddl_slice.SelectedValue, dt_to_integer(Picker1.Text),
dt_to_integer(Picker2.Text), Txt_Year.Text);
Gridview1.DataBind();
}
答案 1 :(得分:1)
对于标签中的绑定数据,请使用绑定方法,而不是 Eval方法。
答案 2 :(得分:0)
不幸的是,我不能给你一个完整的答案,但我认为这可能会指出你正确的方向。通常,当我看到类似这样的内容时,它与Page Lifecycle有关。仔细查看事件发生的顺序。可能是您的编辑按钮仅在第二次尝试时起作用,因为数据绑定的时间相对于事件触发。
答案 3 :(得分:0)
<asp:TemplateField HeaderText="Slice" SortExpression="name">
<ItemTemplate>
<asp:Label ID="lblslice" Text='<%# Eval("slice") %>' runat="server"></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:Label ID="lblslice" Text='<%# Eval("slice") %>' runat="server"></asp:Label>//in this place give textbox control
</EditItemTemplate>
</asp:TemplateField>
在edititemtemplate中,您将使用标签而不是文本框。所以请在edititemtemplate中将标签更改为文本框,看看它是否有效。
答案 4 :(得分:0)
只需将此添加到您的活动中
即可 protected void grdViewDetails_RowEditing(object sender, System.Web.UI.WebControls.GridViewEditEventArgs e) {
grdViewDetails.EditIndex = e.NewEditIndex;
Page_Load(null, null);
}
那个Page_Load(null,null)-Postback-用新的EditIndex加载你的datagridview(假设你在page_load事件上更新你的gridview)
答案 5 :(得分:0)
最近,我发现了同样的问题。我所做的就是在Gridview1.DataBind()
之外和每个事件处理程序中添加if(!IsPostBack)
。
答案 6 :(得分:-1)
您在页面加载中缺少!Page.IsPostBack
条件。