2 Stimmen

Wie kann ich Zeilenwerte in der Gitteransicht bearbeiten und aktualisieren?

Ich habe eine Gitteransicht wie diese:

<asp:GridView ID="gvProducts" runat="server" AutoGenerateEditButton="True" AutoGenerateColumns="False"
                OnRowEditing="gvProducts_RowEditing" OnRowUpdating="gvProducts_RowUpdating" CellPadding="4"
                ForeColor="#333333" GridLines="None">
                <RowStyle BackColor="#FFFBD6" ForeColor="#333333" />
                <Columns>
                    <asp:TemplateField>
                        <HeaderTemplate>
                            <asp:Label ID="lblPID" runat="server" Text="Product ID"></asp:Label>
                        </HeaderTemplate>
                        <ItemTemplate>
                            <asp:Label ID="lblProdID" runat="server" Text='<%#Eval("ProductID")%>'></asp:Label>
                        </ItemTemplate>
                        <EditItemTemplate>
                            <asp:TextBox ID="txtProdID" runat="server" Text='<%#Eval("ProductID")%>'></asp:TextBox>
                        </EditItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField>
                        <HeaderTemplate>
                            <asp:Label ID="lblPName" runat="server" Text="Product Name"></asp:Label>
                        </HeaderTemplate>
                        <ItemTemplate>
                            <asp:Label ID="lblProdName" runat="server" Text='<%#Eval("ProductName")%>'></asp:Label>
                        </ItemTemplate>
                        <EditItemTemplate>
                            <asp:TextBox ID="txtProdName" runat="server" Text='<%#Eval("ProductName")%>'></asp:TextBox>
                        </EditItemTemplate>
                    </asp:TemplateField>
                </Columns>
                <FooterStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
                <PagerStyle BackColor="#FFCC66" ForeColor="#333333" HorizontalAlign="Center" />
                <SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="Navy" />
                <HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
                <AlternatingRowStyle BackColor="White" />
            </asp:GridView>

und hier ist der Code hinter der Seite

    protected void gvProducts_RowEditing(object sender, GridViewEditEventArgs e)
    {
        gvProducts.EditIndex = e.NewEditIndex;
    }

    protected void gvProducts_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {

        int i = e.RowIndex;
        object control = gvProducts.Rows[i].FindControl("txtProdID");
        //i want to access the new value from the object "control" but i m getting the previous value only
    }

3voto

santosh singh Punkte 26504

Versuchen Sie dies

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{ 
TextBox txtProdID = (TextBox)gvProducts.Rows[e.RowIndex].FindControl("txtProdID");
TextBox txtProdName = (TextBox)gvProducts.Rows[e.RowIndex].FindControl("txtProdName");

//Call update method
Product.Update(txtProdId,txtProdName);

gvProducts.EditIndex = -1;
//Refresh the gridviwe
BindGrid(); 
}

0voto

Vijay Sirigiri Punkte 4583

Sie müssen die e.NewValues Wörterbuch für aktualisierte Daten.

Ich habe ein Beispiel unten, die GridView-Vorlage ist an CategoryName gebunden. OnRowUpdating wird ausgelöst, wenn auf die Schaltfläche "Bearbeiten" geklickt wird. Im RowUpdating-Ereignishandler werden die CategoryName-Daten abgerufen, an die das Textfeld gebunden ist.

Hinweis: Verwenden Sie anstelle der TextBox im normalen Modus Labels.

<asp:GridView ID='GridView1' runat='server' DataKeyNames='CategoryID' OnRowUpdating='HandleOnGridViewRowUpdating'
        DataSourceID='ObjectDataSource1' AutoGenerateColumns='false'>
        <Columns>
            <asp:CommandField ShowEditButton="true" />
            <asp:TemplateField>
                <HeaderTemplate>
                    <asp:Label ID='CategoryName' Text='Category' runat='server'></asp:Label>
                </HeaderTemplate>
                <ItemTemplate>
                    <asp:TextBox ID='CategoryNameTextbox' Text='<%# Bind("CategoryName") %>' runat='server'></asp:TextBox>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>

code-behind:

public void HandleOnGridViewRowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        if (e.NewValues["CategoryName"] != null)
        {
            String newCategoryName = e.NewValues["CategoryName"].ToString();
            // process the data; 
        }
    }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X