无法在 DetailsView Edit 模板中访问控制
Cannot access control inside DetailsView Edit template
大家好,提前致谢,
嗯,我的 .aspx 文件中有一个 DetailsView,但我无法访问 DetailsView 编辑模板中的 CheckBoxList 控件。我已经阅读了很多关于此的主题,但仍然找不到解决方案。这是代码...
<asp:DetailsView ID="MyDetailsView" runat="server" Height="50px" Width="125px" AutoGenerateRows="False" DataSourceID="DataMyDetailsView">
...
...
<asp:TemplateField HeaderText="DATA" SortExpression="DATA">
<EditItemTemplate>
<div style="width:400px; height:300px; overflow-y:auto">
<asp:CheckBoxList ID="DataCL" runat="server" DataSourceID="DataEDIT" DataTextField="DATA" DataValueField="ID_DATA">
</asp:CheckBoxList>
</div>
然后,在我的 .cs 文件中有这段代码...
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
// Do something
}
else
{
CheckItems();
}
}
...
...
public void CheckItems()
{
CheckBoxList DataCL = (CheckBoxList)MyDetailsView.FindControl("DataCL");
using (conexion)
{
conexion.Open();
cmd.Connection = conexion;
DataSet ds = new DataSet();
string cmdstr = "SELECT * FROM DATA";
SqlDataAdapter adp = new SqlDataAdapter(cmdstr, conexion);
adp.Fill(ds);
DataCL.DataSource = ds;
DataCL.DataTextField = "DATA";
DataCL.DataValueField = "ID_DATA";
DataCL.DataBind();
问题是,当执行到达调用控件的第一行时 (DataCL.DataSource = ds;),抛出 "NullPointerExeception",但是我可以轻松访问控件项目模板。
拜托,有人可以帮我解决这个问题吗?再次感谢!
你不能这样做,因为这个控件是在数据绑定之后动态创建的。而是将您的网格附加到 DataBound
(MSDN) 事件并在那里绑定复选框列表
protected void MyDetailsView_DataBound(object sender, EventArgs e)
{
if (MyDetailsView.CurrentMode == DetailsViewMode.Edit)
{
CheckBoxList DataCL = (CheckBoxList)MyDetailsView.FindControl("DataCL");
using (conexion)
{
// your data bound code goes here
}
}
}
大家好,提前致谢,
嗯,我的 .aspx 文件中有一个 DetailsView,但我无法访问 DetailsView 编辑模板中的 CheckBoxList 控件。我已经阅读了很多关于此的主题,但仍然找不到解决方案。这是代码...
<asp:DetailsView ID="MyDetailsView" runat="server" Height="50px" Width="125px" AutoGenerateRows="False" DataSourceID="DataMyDetailsView">
...
...
<asp:TemplateField HeaderText="DATA" SortExpression="DATA">
<EditItemTemplate>
<div style="width:400px; height:300px; overflow-y:auto">
<asp:CheckBoxList ID="DataCL" runat="server" DataSourceID="DataEDIT" DataTextField="DATA" DataValueField="ID_DATA">
</asp:CheckBoxList>
</div>
然后,在我的 .cs 文件中有这段代码...
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
// Do something
}
else
{
CheckItems();
}
}
...
...
public void CheckItems()
{
CheckBoxList DataCL = (CheckBoxList)MyDetailsView.FindControl("DataCL");
using (conexion)
{
conexion.Open();
cmd.Connection = conexion;
DataSet ds = new DataSet();
string cmdstr = "SELECT * FROM DATA";
SqlDataAdapter adp = new SqlDataAdapter(cmdstr, conexion);
adp.Fill(ds);
DataCL.DataSource = ds;
DataCL.DataTextField = "DATA";
DataCL.DataValueField = "ID_DATA";
DataCL.DataBind();
问题是,当执行到达调用控件的第一行时 (DataCL.DataSource = ds;),抛出 "NullPointerExeception",但是我可以轻松访问控件项目模板。
拜托,有人可以帮我解决这个问题吗?再次感谢!
你不能这样做,因为这个控件是在数据绑定之后动态创建的。而是将您的网格附加到 DataBound
(MSDN) 事件并在那里绑定复选框列表
protected void MyDetailsView_DataBound(object sender, EventArgs e)
{
if (MyDetailsView.CurrentMode == DetailsViewMode.Edit)
{
CheckBoxList DataCL = (CheckBoxList)MyDetailsView.FindControl("DataCL");
using (conexion)
{
// your data bound code goes here
}
}
}