Доступ к элементу управления Label внутри элемента управления DetailsView
Я пытаюсь установить текст элемента управления меткой, который находится внутри подробного просмотра, но он не работает. Но он показывает ошибку "Ссылка на объект не установлена на экземпляр объекта". кто-нибудь может направить меня, пожалуйста..?? Мой код переднего конца:
<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);
}
2 ответа
Вы должны использовать FindControl для строки, а не DataListView
Вы хотите найти свой ярлык по идентификатору, но какой? Для каждой строки у вас есть метка с идентификатором "Ques_id_label". Таким образом, чтобы найти конкретную метку, вы должны указать нужную строку. Я не работал с DataLisView, но я знаю, что он логически похож на Asp: Repeater. Чтобы найти элемент управления в строке повторителя при отправке команды из строки:
protected void SaveAnswer(Object Sender, RepeaterCommandEventArgs e)
{
Label Ques_id_label = (Label)e.Item.FindControl("Ques_id_label");
Который с e.item
Вы указываете предполагаемый ряд.
Вы используете FindControl, чтобы найти Ques_id_label
, но тогда все равно ссылайтесь на него обычно: Ques_id_label.Text =
Так должно быть Question_Id.Text = Convert.ToString(question_id);
с идентификатором, который вы присвоили FindControl.
Но это даже компилировалось? Используете ли вы такой редактор, как Visual Studio? Потому что, когда я попробовал ваш фрагмент, он дал ошибку The name 'Ques_id_label' does not exist in the current context
, как и положено.