Нажмите кнопку редактирования дважды в gridview asp.net c # проблема - PullRequest
1 голос
/ 03 апреля 2012

У меня есть сетка, созданная на странице, где я хочу предоставить пользователю кнопку редактирования, чтобы щелкнуть в ней. Однако проблема в том, что строка сетки становится редактируемой только при повторном нажатии кнопки редактирования.Не уверен, что здесь происходит не так, любая помощь будет оценена.

Еще один момент - мой вид сетки отображается на странице только одним нажатием кнопки и, следовательно, отсутствует в событии 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();


}

Макет моей страницы

Этот экран редактирования появляется после двойного нажатия кнопки "Изменить". Вид сетки отображается при нажатии кнопки "Рассчитать влияние".Данные взяты из внутренней хранимой процедуры, которая запускается при нажатии кнопки «Рассчитать влияние»

Ответы [ 7 ]

1 голос
/ 01 апреля 2013

Вам нужно снова вызвать 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 голос
/ 05 апреля 2018

Для привязки данных в метке используйте Метод связывания вместо Метод оценки .

0 голосов
/ 28 июня 2013

Недавно я обнаружил ту же проблему.Чтобы исправить это, я добавил Gridview1.DataBind() за пределами if(!IsPostBack) и в каждом обработчике событий.

0 голосов
/ 12 апреля 2013

Просто добавьте это к вашему событию

 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 (если вы обновите свое сеточное представление для события page_load)

0 голосов
/ 01 апреля 2013
<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 и посмотрите, как она будет работать.

0 голосов
/ 03 апреля 2012

Вам не хватает условия !Page.IsPostBack при загрузке страницы.

0 голосов
/ 03 апреля 2012

К сожалению, я не могу дать вам полный ответ, но я думаю, что это может указать вам правильное направление.Обычно, когда я вижу что-то подобное, это имеет отношение к Page Lifecycle .Внимательно посмотрите на порядок, в котором ваши события запускаются.Возможно, ваша кнопка редактирования работает только со второй попытки из-за времени привязки данных относительно срабатывания события.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...