paul_vin Ответов: 1

Могу ли я сделать так, чтобы кнопка обновления gridview.editindex = e.rowindex - 1 присутствовала вне gridview


protected void gvMain_RowEditing(object sender, GridViewEditEventArgs e)
    {
           }


У меня есть даже хандлар как выше который пуст

на row_Command я получаю данные, и назначить ему текстовые блоки изложе вне GridView в

Теперь я хочу обновить эти данные это обновление но когда я загружаю Gridview любая обновленная строка отображается в режиме редактирования но я не хочу чтобы она была в режиме обновления

Что я уже пробовал:

<div class="row table-responsive grid" style="margin-top: 20px; margin: 1px">
                                              <asp:GridView ID="gvMain" runat="server" HeaderStyle-BackColor="#336699" HeaderStyle-ForeColor="White" Font-Size="15px" PageSize="15"
                           AutoGenerateColumns="false" BackColor="White" BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px" CellPadding="3" Width="100%" OnRowDataBound="gvMain_RowDataBound"
                           OnRowCommand="gvMain_RowCommand" OnRowEditing="gvMain_RowEditing" OnRowDeleting="gvMain_RowDeleting">
                           <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
                           <Columns>
                               <asp:BoundField DataField="Master_Ref_Value_Id" HeaderStyle-CssClass="hide" ItemStyle-CssClass="hide" />
                               <asp:BoundField DataField="Main_Test_Id" HeaderStyle-CssClass="hide" ItemStyle-CssClass="hide" />
                               <asp:BoundField HeaderText="Sr.No">
                                   <FooterStyle BackColor="#CCCCCC" />
                                   <HeaderStyle Height="30px" HorizontalAlign="Right"></HeaderStyle>
                                   <ItemStyle Height="30px" HorizontalAlign="Left" VerticalAlign="Middle" BorderColor="#CCCCCC" />
                               </asp:BoundField>
                               <asp:BoundField HeaderText="Ref Name" DataField="Ref_Name" HeaderStyle-HorizontalAlign="Center">
                                   <ItemStyle Height="30px" HorizontalAlign="Left" VerticalAlign="Middle" BorderColor="#CCCCCC" />
                               </asp:BoundField>
                               <asp:BoundField HeaderText="KeyVal" DataField="KeyVal" HeaderStyle-HorizontalAlign="Center">
                                   <ItemStyle Height="30px" HorizontalAlign="Left" VerticalAlign="Middle" BorderColor="#CCCCCC" />
                               </asp:BoundField>
                               <asp:BoundField HeaderText="Unit" DataField="Unit" HeaderStyle-HorizontalAlign="Center">
                                   <ItemStyle Height="30px" HorizontalAlign="Left" VerticalAlign="Middle" BorderColor="#CCCCCC" />
                               </asp:BoundField>
                               <asp:BoundField HeaderText="Value" DataField="Value" HeaderStyle-HorizontalAlign="Center">
                                   <ItemStyle Height="30px" HorizontalAlign="Left" VerticalAlign="Middle" BorderColor="#CCCCCC" />
                               </asp:BoundField>
                               <asp:BoundField HeaderText="Main_Test" DataField="Main_Test" HeaderStyle-HorizontalAlign="Center">
                                   <ItemStyle Height="30px" HorizontalAlign="Left" VerticalAlign="Middle" BorderColor="#CCCCCC" />
                               </asp:BoundField>


                               <asp:ButtonField ButtonType="Link" CausesValidation="false" HeaderText="Edit" ControlStyle-ForeColor="blue" CommandName="Edit" Text="Edit">
                                   <HeaderStyle Width="30" />
                               </asp:ButtonField>
                               <asp:ButtonField ButtonType="Link" CausesValidation="false" HeaderText="Delete" ControlStyle-ForeColor="blue" CommandName="Delete" Text="Delete">
                                   <HeaderStyle Width="30" />
                               </asp:ButtonField>

                           </Columns>
                       </asp:GridView>


                   </div>



обновление btn вне gridview

<div class="col-md-1">
                                            <asp:Button ID="btnSubmit" runat="server" Text="Submit" CssClass="btn btn-success" ValidationGroup="submit" OnClick="btnSubmit_Click" />

                                            <asp:Button ID="btnUpdate" runat="server" Text="Update" CssClass="btn btn-success" ValidationGroup="submit" OnClick="btnUpdate_Click" />
                                        </div>


protected void gvMain_RowEditing(object sender, GridViewEditEventArgs e)
    {
        
   }




protected void btnUpdate_Click(object sender, EventArgs e)
    {
        int MasterRefValueId = 0;
        int MainTestId = 0;

        int.TryParse(ddlMainTest.SelectedValue.ToString(), out MainTestId);

        if (hdnMasterRefValueId.Value != null)
        {
            int.TryParse(hdnMasterRefValueId.Value.ToString(), out MasterRefValueId);
            hdnMasterRefValueId.Value = null;
        }
        Master_ref_value objMaster_ref_value = new Master_ref_value(MasterRefValueId, MainTestId, txtRefName.Text, txtKeyVal.Text, txtUnit.Text, txtValue.Text);

        bool result;
        result = objMaster_ref_value.Update();

        if (result)
        {
            lblMessage.Text = "Record Updated Successfully";
            lblMessage.ForeColor = System.Drawing.Color.Green;
            lblMessage.Visible = true;
            Reset();
            ClientScript.RegisterStartupScript(this.GetType(), "alert", "HideLabel();", true);
            //gvMain.EditIndex = e.RowIndex - 1;
        }
        else
        {
            lblMessage.Text = "Record Updation failed";
            lblMessage.ForeColor = System.Drawing.Color.Red;
            lblMessage.Visible = true;
            Reset();
            ClientScript.RegisterStartupScript(this.GetType(), "alert", "HideLabel();", true);
        }
        Panel4.Visible = false;
        fillgridview();
        lblMessage.Visible = false;
        EmpRegistrationpanel2.Visible = false;
        EmpRegistrationpanel1.Visible = true;
    }




где я должен использовать
//gvMain.EditIndex = e.RowIndex - 1;

Vincent Maverick Durano

Я не уверен, что правильно вас понял. Вы можете, пожалуйста, пояснить?

Herman&lt;T&gt;.Instance

То, что он, кажется, хочет, это когда вы нажимаете строку 0, что строка -1 устанавливается в EditMode.

Vincent Maverick Durano

Я снова перечитал вопрос и думаю, что это не так.

1 Ответов

Рейтинг:
0

Vincent Maverick Durano

Поведение по умолчанию GridView управление заключается в том, чтобы выполнять редактирование и обновление одной строки за раз. Похоже, что вы пытаетесь использовать обновление Button вне вашего GridView что для вас нет никакого способа определить, какую строку вы на самом деле редактируете. Чтобы обновить строку, вы должны обрабатывать RowUpdating событие, чтобы сделать это, а затем обработать вашу логику обновления там вместо этого.

Вот несколько примеров::
Используя TemplateFields
Добавление строк в GridView с функциями редактирования, обновления и удаления[^]
Использование BoundFields
GridView Insert, Edit, Update and Delete – Адо.Чистый путь[^]


Теперь, если вы пытаетесь выбрать строку из GridView и заполните выбранные значения в вашем TextBox то есть вне вашего GridView тогда вы можете избавиться от RowEditing событие и редактирование ButtonField. Вам просто нужно будет настроить ShowSelectButton CommandField в GridView любить:

<asp:GridView ID="GridView1"  runat="server" AutoGenerateColumns="False" OnSelectedIndexChanged="GridView1_SelectedIndexChanged"  >
<Columns>
<asp:CommandField ShowSelectButton="True" />
<asp:BoundField   />
<asp:BoundField   />
</Columns>
</asp:GridView>


и в то же время SelectedIndexChanged событие вы можете сделать что-то вроде этого, чтобы получить выбранные данные строки и заполнить текстовое поле:

protected void GridView1_SelectedIndexChanged(object sender, EventArgs e){
       //Where index of Cells is the column in Grid that you wan't to refer
       TextBox1.Text = GridView1.SelectedRow.Cells[0].Text; 
       TextBox2.Text = GridView1.SelectedRow.Cells[1].Text;
       //If accessing TemplateField column then you can use FindControl method
} 


Затем вы можете использовать код, который у вас есть в вашем обновлении Button то есть за пределами GridView чтобы обновить данные.