検索ボックスが結果を返すときに 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();
}
}
}
}