提问人:user2769165 提问时间:11/9/2013 更新时间:10/31/2018 访问量:39681
在 Repeater Asp.net 中查找标签控件
Find Label Control in Repeater Asp.net
问:
我正在使用中继器,我想在我的中继器中找到标签控件。这是我的代码
<asp:Repeater ID="friendRepeater" runat="server">
<table cellpadding="0" cellspacing="0">
<ItemTemplate>
<tr style=" width:700px; height:120px;">
<td>
<div style=" padding-left:180px;">
<div id="leftHandPost" style="float:left; width:120px; height:120px; border: medium solid #cdaf95; padding-top:5px;">
<div id="childLeft" style=" padding-left:5px;">
<div id="photo" style=" border: thin solid black; width:100px;height:100px;">
<asp:Image id="photoImage" runat="server" ImageUrl='<%# String.Concat("Images/", Eval("Picture")) %>' Width="100px" Height="100px" />
</div>
</div><!--childLeft-->
</div><!--leftHandPost-->
</div>
</td>
<td>
<div id="rightHandPost" style=" float:right; padding-right:260px;">
<div id="childRight" style="width:400px; height:120px; border: medium solid #cdaf95; padding-top:5px; padding-left:10px;">
<strong><asp:Label id="lblName" runat="server"><%# Eval("PersonName") %></asp:Label></strong><br />
<div style=" float:right; padding-right:10px;"><asp:Button runat="server" Text="Add" onClick="add" /></div><br />
<asp:Label id="lblID" runat="server"><%# Eval("PersonID") %></asp:Label><br />
<asp:Label id="lblEmail" runat="server"><%# Eval("Email") %></asp:Label>
</div><!--childRight-->
</div><!--rightHandPost-->
</td>
</tr>
</ItemTemplate>
<AlternatingItemTemplate>
<tr style=" width:700px; height:120px;">
<td>
<div style=" padding-left:180px;">
<div id="Div1" style="float:left; width:120px; height:120px; border: medium solid #cdaf95; padding-top:5px;">
<div id="Div2" style="padding-left:5px;">
<div id="Div3" style=" border: thin solid black; width:100px;height:100px;">
<asp:Image id="photoImage" runat="server" ImageUrl='<%# String.Concat("Images/", Eval("Picture")) %>' Width="100px" Height="100px" />
</div>
</div><!--childLeft-->
</div><!--leftHandPost-->
</div>
</td>
<td>
<div id="Div4" style=" float:right; padding-right:260px;">
<div id="Div5" style="width:400px; height:120px; border: medium solid #cdaf95; padding-top:5px; padding-left:10px;">
<strong><asp:Label id="lblName" runat="server"><%# Eval("PersonName")%></asp:Label></strong>
<div style=" float:right; padding-right:10px;"><asp:Button id="btnAdd" runat="server" Text="Add" onClick="add"></asp:Button></div><br />
<br />
<asp:Label id="lblID" runat="server"><%# Eval("PersonID") %></asp:Label><br />
<asp:Label id="lblEmail" runat="server"><%# Eval("Email") %></asp:Label>
</div><!--childRight-->
</div><!--rightHandPost-->
</td>
</tr>
</AlternatingItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
下面是添加按钮的隐藏代码。
protected void add(object sender, EventArgs e)
{
DateTime date = DateTime.Now;
System.Web.UI.WebControls.Label la = (System.Web.UI.WebControls.Label)friendRepeater.FindControl("PersonID");
String id = la.Text;
try
{
MySqlConnection connStr = new MySqlConnection();
connStr.ConnectionString = "Server = localhost; Database = healthlivin; Uid = root; Pwd = khei92;";
String insertFriend = "INSERT INTO contactFriend(friendID, PersonID, PersonIDB, date) values (@id, @personIDA, @personIDB, @date)";
MySqlCommand cmdInsertStaff = new MySqlCommand(insertFriend, connStr);
cmdInsertStaff.Parameters.AddWithValue("@id", "F000004");
cmdInsertStaff.Parameters.AddWithValue("@personIDA", "M000001");
cmdInsertStaff.Parameters.AddWithValue("@personIDB", id);
cmdInsertStaff.Parameters.AddWithValue("@date", date);
connStr.Open();
cmdInsertStaff.ExecuteNonQuery();
MessageBox.Show("inserted");
connStr.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
我收到对象引用未设置为对象实例的错误。我认为是因为标签中没有价值。查找控件不起作用。我可以知道如何解决这个问题吗?谢谢
答:
3赞
user1968030
11/9/2013
#1
我认为您可以使用这个:
var personId= (Label)friendRepeater.Items[0].FindControl("PersonID");
评论
0赞
user2769165
11/9/2013
对象引用未设置为对象的实例。
0赞
11/9/2013
我认为你的问题不是为了找到一个控件\
1赞
Alice
11/9/2013
#2
问题是你没有任何标签名称“personID”,所以它找不到该控件。
我假设你想从这一行中获取价值
<asp:Label id="lblID" runat="server"><%# Eval("PersonID") %></asp:Label>
而这个 Label 控件命名为“lblID”,所以你的查询代码应该是
System.Web.UI.WebControls.Label la = (System.Web.UI.WebControls.Label)friendRepeater.FindControl("lblID");
使用 lblID 而不是 PersonID 查找控件
评论
1赞
user2769165
11/9/2013
哎呀......我犯了一个错误..我已经更改了它,但没有插入到数据库中的值,但没有错误。我可以了解更多吗?
0赞
Alice
11/9/2013
此方法cmdInsertStaff.ExecuteNonQuery(); 应该返回受影响的行数,您应该检查返回值是否大于 zoro,如果不是,则意味着您连接到 mySQL 的命令有问题。还请放置断点和调试以检查要插入的所有值。
0赞
user2769165
11/9/2013
呃~~对不起,我不明白你的意思。可以进一步解释吗?谢谢。
0赞
Alice
11/9/2013
首先,您必须在运行时检查所有值是否正确,在这种情况下,我的意思是您从 PersonID 字段获取的 id 值。然后,您应该将此行 cmdInsertStaff.ExecuteNonQuery(); 修改为 int rowAffected = cmdInsertStaff.ExecuteNonQuery();,并检查 rowAffected 值,如果它大于 0,则表示您的插入代码已完成。但如果没有,这意味着您的插入代码有问题。
0赞
Alice
11/9/2013
我不知道你的整个项目结构,但可能有很多原因导致你无法将数据插入数据库。如果确定连接字符串正确并且可以连接到数据库,则问题出在插入命令和数据库中的数据字段权限上。
8赞
pushu
11/17/2014
#3
foreach (RepeaterItem item in friendRepeater.Items)
{
Label lab = item.FindControl("lblName") as Label;
}
-1赞
Pavani Manthena
5/15/2018
#4
这对我有用。
标签 lblperson = (标签)(rpfrndRepeater.Items[0])。FindControl(“lblPerson”);
评论
CommandName
CommandArgument