0

検索ボックスが結果を返すときに ddl をバインドしようとしています。DDL は次のようにバインドされます。

<asp:TemplateField HeaderText="Service Area" SortExpression="ServiceArea">
  <EditItemTemplate>
    <asp:DropDownList ID="drp_Val_ServiceArea" runat="server" DataTextField="ServiceArea"
        DataValueField='<%# Eval("ServiceAreaId") %>'>
    </asp:DropDownList>
  </EditItemTemplate>
  <ItemTemplate>
    <asp:Label ID="lbl_Bind_ServiceArea" runat="server" Text='<%# Bind("ServiceArea") %>'></asp:Label>
  </ItemTemplate>
</asp:TemplateField>

検索を使用してグリッドをロードすると、ページが正常にロードされます。編集ボタンを押すと、例外はインスタンスに設定されていないオブジェクトです。とのエラーddl.DataTextField = "ServiceArea"

protected void grd_User_RowEditing(object sender, GridViewEditEventArgs e)
{
grd_User.EditIndex = e.NewEditIndex;


using (var _db = new dbDataContext())
{
    var result = from s in _db.tbl_ServiceAreas
                    where s.Deleted == false
                    select new
                    {
                        s.ServiceAreaId,
                        s.ServiceArea
                    };

    if ((DataControlRowState.Edit) > 0)
    {

        DropDownList ddl = (DropDownList)grd_User.Rows[e.NewEditIndex].Cells[0].FindControl("drp_Val_ServiceArea");

        ddl.DataTextField = "ServiceArea";
        ddl.DataValueField = "ServiceAreaId";
        ddl.DataSource = result;
        ddl.DataBind();

    }
}
 LoadGrid();
}

これは、グリッドが既に ServiceArea にバインドされているためですか?

以下は私が探していた答えです。

        protected void grd_User_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowState == DataControlRowState.Edit)
        {
            DropDownList ddl = (DropDownList)e.Row.FindControl("drp_Val_ServiceArea");

            using (var _db = new dbDataContext())
            {
                var result = from s in _db.tbl_Users
                             where s.Deleted == false
                             select new
                             {
                                 s.ServiceAreaId,
                                 s.tbl_ServiceArea.ServiceArea
                             };

                foreach (var item in result)
                {
                    ddl.DataTextField = item.ServiceArea;
                    ddl.DataValueField = item.ServiceAreaId.ToString();
                    ddl.DataSource = result;
                    ddl.DataBind();
                }

            }
        }
    }
4

0 に答える 0