3

私はGridViewそう好きです:

<asp:GridView runat="server" ID="grdPractices" PageSize="10" AutoGenerateColumns="False" DataKeyNames="Id" 
    CssClass="linkGrid" AllowSorting="True" OnSorting="grdPractices_OnSorting" OnRowDataBound="grdPractices_OnRowDataBound"
    OnRowEditing="grdPractices_OnRowEditing" OnRowCancelingEdit="grdPractices_OnRowCancelingEdit" OnRowUpdating="grdPractices_OnRowUpdating">
    <Columns>
        <asp:BoundField DataField="Name" HeaderText="Name" meta:resourcekey="PracticeName" ReadOnly="True" SortExpression="Name" ItemStyle-Width="400px" />
        <asp:BoundField DataField="Code" HeaderText="Code" meta:resourcekey="Code" ReadOnly="True" SortExpression="Code" ItemStyle-Width="200px" />
        <asp:TemplateField meta:resourcekey="SiteName" ItemStyle-Width="200px" SortExpression="SiteName">
            <ItemTemplate>
                <asp:Literal runat="server" Text='<%# Eval("SiteName") %>' />
            </ItemTemplate>
            <EditItemTemplate>
                <asp:DropDownList runat="server" ID="lstSites" />
            </EditItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField meta:resourcekey="NumOfUsers" ItemStyle-Width="200px" SortExpression="NumOfUsers">
            <ItemTemplate>
                <asp:LinkButton runat="server" OnCommand="OnLinkButtonCommand" CommandName="ViewUsers" Text='<%# Eval("NumOfUsers") %>' />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:CommandField ShowDeleteButton="False" ShowCancelButton="True" 
            ShowInsertButton="False" ShowEditButton="True" EditText="Edit"
            CancelText="Cancel" UpdateText="Update" meta:resourcekey="Edit" ItemStyle-Width="200px" />
    </Columns>
</asp:GridView>

OnRowEditingイベントのコードは次のとおりです。

protected void grdPractices_OnRowEditing(object sender, GridViewEditEventArgs e)
{
    this.grdPractices.EditIndex = e.NewEditIndex;

    var sitesDropDown = this.grdPractices.Rows[e.NewEditIndex].Controls[0].FindControl("lstSites") as DropDownList;

    if (sitesDropDown == null)
    {
        return;
    }
}

私の問題はlstSites、EditTemplateにあるコントロールを取得できないことです。私は以下を使用してみました:

  • this.grdPractices.Rows [e.NewEditIndex] .Controls [0] .FindControl( "lstSites")as DropDownList;
  • this.grdPractices.Rows [e.NewEditIndex] .FindControl( "lstSites")as DropDownList;
  • this.grdPractices.Rows [e.NewEditIndex] .FindControlRecursive( "lstSites")as DropDownList;

結果は常に同じで、aNULLが返されます。

OnRowEditingイベントで、一体どのように連続してコントロールを取得することになっていますか?

4

2 に答える 2

1

OK、この行の後で、私がしていなかったこと:

this.grdPractices.EditIndex = e.NewEditIndex;

その後、グリッドのデータを再バインドしていました。したがって、データを再バインドしてから呼び出した後:

var sitesDropDown = this.grdPractices.Rows[e.NewEditIndex].FindControlRecursive("lstSites") as DropDownList;

siteDropDownコントロールへの参照が含まれているため、変数を操作できるようになりましたlstSites

于 2012-10-26T10:54:24.663 に答える
0

次のように使用GridViewRowしてみてください...

protected void grd_RowEditing(object sender, GridViewEditEventArgs e) 
{
     GridViewRow selectRow = grd.Rows(e.NewEditIndex);
     DropDownList sitesDropDown =(DropDownList)selectRow.Cells[2].FindControl("lstSites"); 
}
于 2012-10-25T14:47:37.477 に答える