访问详细信息视图控件内的标签控件

时间:2017-04-01 10:40:07

标签: c# asp.net 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 个答案:

答案 0 :(得分:0)

您使用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,因为它应该是。

答案 1 :(得分:0)

您必须使用 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指定预期的行。