访问 detailsview 控件内部的 Label 控件
Access Label control inside the detailsview control
我正在尝试设置 detailsview 中的标签控件的文本,但它不起作用。但它显示错误 "Object reference not set to an instance of an object."
谁能指导我.. ??
我的前端代码是:
<asp:Panel ID="sub_question_panel" runat="server">
<asp:DetailsView ID="DetailsView1" runat="server" CellPadding="6" ForeColor="#333333" AutoGenerateRows="false" GridLines="None" >
<Fields>
<asp:TemplateField>
<ItemTemplate>
<table id="Question_view_table">
<tr>
<td style="font-family:Arial Rounded MT;">
<label id="Question_no"><span style="font-size:20px;">Question</span>:</label>
<asp:Label ID="Ques_id_label" runat="server" Text="Label"></asp:Label></td>
</tr>
<tr>
<td style="height:20px"></td>
</tr>
<tr>
<td style="font-family:'Times New Roman'; font-size:18px; ">
<label id="Question_detail"><%# Eval ("Question") %></label>
</td>
</tr>
<tr>
<td style="font-family:'Times New Roman'; font-size:18px;">
<ol style="list-style:upper-alpha">
<li>
<label id="optn1">   <%# Eval ("Option1") %></label></li>
<li>
<label id="optn2">   <%# Eval ("Option2") %></label></li>
<li>
<label id="optn3">   <%# Eval ("Option3") %></label></li>
<li>
<label id="optn4">   <%# Eval ("Option4") %></label></li>
</ol>
</td>
</tr>
</table>
</ItemTemplate>
</asp:TemplateField>
</Fields>
</asp:DetailsView>
</asp:Panel>
我的后端代码是:
protected void Page_Load(object sender, EventArgs e)
{
int question_id = 1;
Label Question_Id = DetailsView1.FindControl("Ques_id_label") as Label;
Question_Id .Text = Convert.ToString(question_id);
}
您使用 FindControl 查找 Ques_id_label
,但随后仍正常引用它:Ques_id_label.Text =
它应该是 Question_Id.Text = Convert.ToString(question_id);
,用你用 FindControl 分配的 ID。
但是它甚至编译了吗?你用Visual Studio这样的编辑器吗?因为当我尝试你的代码片段时,它给出了错误 The name 'Ques_id_label' does not exist in the current context
,这是应该的。
您必须对一行使用 FindControl,而不是 DataListView
您想通过 id 找到您的标签,但是哪一个?对于每一行,您都有一个带有 id 'Ques_id_label' 的标签。因此,要查找特定标签,您必须指定预期的行。我没有使用 DataLisView 但我知道它在逻辑上类似于 Asp:Repeater 。从一行发送命令时,在 Repeater 的一行中查找控件:
protected void SaveAnswer(Object Sender, RepeaterCommandEventArgs e)
{
Label Ques_id_label = (Label)e.Item.FindControl("Ques_id_label");
其中 e.item
您指定了预期的行。
我正在尝试设置 detailsview 中的标签控件的文本,但它不起作用。但它显示错误 "Object reference not set to an instance of an object." 谁能指导我.. ?? 我的前端代码是:
<asp:Panel ID="sub_question_panel" runat="server">
<asp:DetailsView ID="DetailsView1" runat="server" CellPadding="6" ForeColor="#333333" AutoGenerateRows="false" GridLines="None" >
<Fields>
<asp:TemplateField>
<ItemTemplate>
<table id="Question_view_table">
<tr>
<td style="font-family:Arial Rounded MT;">
<label id="Question_no"><span style="font-size:20px;">Question</span>:</label>
<asp:Label ID="Ques_id_label" runat="server" Text="Label"></asp:Label></td>
</tr>
<tr>
<td style="height:20px"></td>
</tr>
<tr>
<td style="font-family:'Times New Roman'; font-size:18px; ">
<label id="Question_detail"><%# Eval ("Question") %></label>
</td>
</tr>
<tr>
<td style="font-family:'Times New Roman'; font-size:18px;">
<ol style="list-style:upper-alpha">
<li>
<label id="optn1">   <%# Eval ("Option1") %></label></li>
<li>
<label id="optn2">   <%# Eval ("Option2") %></label></li>
<li>
<label id="optn3">   <%# Eval ("Option3") %></label></li>
<li>
<label id="optn4">   <%# Eval ("Option4") %></label></li>
</ol>
</td>
</tr>
</table>
</ItemTemplate>
</asp:TemplateField>
</Fields>
</asp:DetailsView>
</asp:Panel>
我的后端代码是:
protected void Page_Load(object sender, EventArgs e)
{
int question_id = 1;
Label Question_Id = DetailsView1.FindControl("Ques_id_label") as Label;
Question_Id .Text = Convert.ToString(question_id);
}
您使用 FindControl 查找 Ques_id_label
,但随后仍正常引用它:Ques_id_label.Text =
它应该是 Question_Id.Text = Convert.ToString(question_id);
,用你用 FindControl 分配的 ID。
但是它甚至编译了吗?你用Visual Studio这样的编辑器吗?因为当我尝试你的代码片段时,它给出了错误 The name 'Ques_id_label' does not exist in the current context
,这是应该的。
您必须对一行使用 FindControl,而不是 DataListView
您想通过 id 找到您的标签,但是哪一个?对于每一行,您都有一个带有 id 'Ques_id_label' 的标签。因此,要查找特定标签,您必须指定预期的行。我没有使用 DataLisView 但我知道它在逻辑上类似于 Asp:Repeater 。从一行发送命令时,在 Repeater 的一行中查找控件:
protected void SaveAnswer(Object Sender, RepeaterCommandEventArgs e)
{
Label Ques_id_label = (Label)e.Item.FindControl("Ques_id_label");
其中 e.item
您指定了预期的行。