Dynamisch hinzugefügte Steuerelemente fehlt in GridView RowUpdating

Ich habe ein GridView mit einem TemplateField-Spalte, dass ich Platzhalter-controls. Während der Datenbindung Ereignis für das GridView ich dynamisch fügen Sie ein paar Kontrollkästchen, um die Platzhalter. Das funktioniert auch und zeigt als erwartet.

Mein problem ist, dass während das RowUpdating-Ereignis der Platzhalter enthält keine Steuerelemente; meine Checkboxen fehlen. Mir ist auch aufgefallen, dass Sie fehlen bei der RowEditing Veranstaltung.

Ich möchte in der Lage sein, um die Werte der Kontrollkästchen, während das RowUpdating-Ereignis, so kann ich diese speichern in der Datenbank.

Hier einige Beispiel-code. Ich habe getrimmt, eine Menge, um Größe zu reduzieren, aber wenn Sie wollen, um zu sehen, Einzelheiten einfach Fragen und ich werde glücklich sein, um mehr hinzuzufügen.

HTML:

<asp:GridView ID="gridView" runat="server" AutoGenerateColumns="False" 
    ondatabound="gridView_DataBound" onrowupdating="gridView_RowUpdating" 
    onrowediting="gridView_RowEditing" DataKeyNames="ID">
    <Columns>
        <asp:TemplateField HeaderText="Countries">
            <ItemTemplate>
                <asp:PlaceHolder ID="countriesPlaceHolder" runat="server"></asp:PlaceHolder>
            </ItemTemplate>
            <EditItemTemplate>
                <asp:PlaceHolder ID="countriesPlaceHolder" runat="server"></asp:PlaceHolder>
            </EditItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField ShowHeader="False">
            <ItemTemplate>
                <asp:LinkButton ID="editButton" runat="server" CommandName="Edit" Text="Edit"></asp:LinkButton>
            </ItemTemplate>
            <EditItemTemplate>
                <asp:LinkButton ID="updateButton" runat="server" CommandName="Update" Text="Update"></asp:LinkButton>
            </EditItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

Code hinter:

//This method works fine, no obvious problems here.
protected void gridView_DataBound(object sender, EventArgs e)
{
    //Loop through the Holidays that are bound to the GridView
    var holidays = (IEnumerable<Holiday>)gridView.DataSource;
    for (int i = 0; i < holidays.Count(); i++)
    {
        //Get the row the Holiday is bound to
        GridViewRow row = gridView.Rows[i];
        //Get the PlaceHolder control
        var placeHolder = (PlaceHolder)row.FindControl("countriesPlaceHolder");
        //Create a CheckBox for each country and add it to the PlaceHolder
        foreach (Country country in this.Countries)
        {
            bool isChecked = holidays.ElementAt(i).Countries.Any(item => item.ID == country.ID);
            var countryCheckBox = new CheckBox
            {
                Checked = isChecked,
                ID = country.Abbreviation + "CheckBox",
                Text = country.Abbreviation
            };
            placeHolder.Controls.Add(countryCheckBox);
        }
    }
}

protected void gridView_RowEditing(object sender, GridViewEditEventArgs e)
{
    //EXAMPLE: I'm expecting checkBoxControls to contain my CheckBoxes, but it's empty.
    var checkBoxControls = gridView.Rows[e.NewEditIndex].FindControl("countriesPlaceHolder").Controls;

    gridView.EditIndex = e.NewEditIndex;
    BindData();
}

protected void gridView_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
    //EXAMPLE: I'm expecting checkBoxControls to contain my CheckBoxes, but it's empty.
    var checkBoxControls = ((PlaceHolder)gridView.Rows[e.RowIndex].FindControl("countriesPlaceHolder")).Controls;

    //This is where I'd grab the values from the controls, create an entity, and save the entity to the database.

    gridView.EditIndex = -1;
    BindData();
}

Dies ist der Artikel, ich folgte meinem data binding-Ansatz: http://www.aarongoldenthal.com/post/2009/04/19/Manually-Databinding-a-GridView.aspx

wirfst du die Platzhalter-variable richtig zum Beispiel Platzhalter Platzhalter = e.Zeile.FindControl("countriesPlaceHolder") als Platzhalter; Sie müssen auch prüfen, die RowType wenn( wenn (e ist.Zeile.RowType == DataControlRowType.DataRow) fügen Sie Ihren code für Platzhalter Beispiel nach, dass.. probieren,..
Ja, in meinem eigentlichen code, den ich tun es Stimmen, die zu einem Platzhalter. Ich habe auch eine überprüfung durchführen, auf die RowType, wie Sie vorgeschlagen. Danke für die Anregung.
Ich kann nicht sehen, wo Sie überprüfen RowType..
Überprüfen dieser Antwort auf StackOverflow als gut und sehen, ob es helfen wird, klingt wie dasselbe Problem.. stackoverflow.com/questions/7343943/...
Sorry, ich meinte mit meinem eigentlichen code, im Gegensatz zu den sample-code, den ich oben gepostet. Ich habe allerdings gerade aktualisiert, der Beispielcode ist gridView_RowUpdating und sogar es getestet auf mein Ende, aber kein Glück noch. Auch ich habe die link, aber das scheint nicht mein problem sein. Ich beschäftige mich mit der richtigen Zeile; ich habe festgestellt, dass während des Debuggens.

InformationsquelleAutor Ecyrb | 2012-02-06

Schreibe einen Kommentar