在gridview asp.net c#issue中单击两次编辑按钮

时间:2012-04-03 14:34:46

标签: asp.net datagridview

我在页面上创建了一个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();


}

My page layout

点击两次编辑后会出现此编辑屏幕。点击计算影响按钮时会显示网格视图。数据来自后端存储过程,该过程在单击“计算影响按钮”

时触发

7 个答案:

答案 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条件。