Доступ к элементу управления 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"> &nbsp&nbsp<%# Eval ("Option1") %></label></li>
<li>
<label id="optn2"> &nbsp&nbsp<%# Eval ("Option2") %></label></li>
<li>
<label id="optn3"> &nbsp&nbsp<%# Eval ("Option3") %></label></li>
<li>
<label id="optn4"> &nbsp&nbsp<%# 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, как и положено.

Другие вопросы по тегам