:) 我希望在生成基于sql的标签时访问标签中任何文本中的数据 但我记得这个错误对象引用没有设置为对象的实例
请帮帮我 :(
<asp:DataList ID="DataList1" runat="server" CellPadding="4"
DataSourceID="SqlDataSource1" ForeColor="#333333">
<AlternatingItemStyle BackColor="White" />
<FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
<HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
<ItemStyle BackColor="#3b5998" />
<ItemTemplate>
<asp:Image ID="Image2" runat="server" Height="40px" ImageUrl='<%# Eval("ProfilePicUrl") %>' Width="50px" />
<div class="name-holder">
<asp:Label ID="UserNameLabel" runat="server" Text='<%# Eval("UserName") %>'
CssClass="request-name"/>
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Add" />
<asp:Button ID="Button2" runat="server" onclick="Button1_Click" Text="Deny" />
</div>
<br />
</ItemTemplate>
<SelectedItemStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
</asp:DataList>
</div>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:FacebookConnectionString %>"
SelectCommand="SELECT FriendRequest. UserName, aspnet_Users.ProfilePicUrl FROM FriendRequest INNER JOIN aspnet_Users ON FriendRequest.UserName = aspnet_Users.UserName WHERE (FriendRequest.FriendRequest = @FriendRequest)">
<SelectParameters>
<asp:ControlParameter ControlID="username" Name="FriendRequest"
PropertyName="Text" />
</SelectParameters>
</asp:SqlDataSource>
C#:
protected void Button1_Click(object sender, EventArgs e)
{
Label UserNameLabel = (Label)DataList1.FindControl("UserNameLabel");
con.ConnectionString = "Data Source=localhost;Initial Catalog=Facebook;Integrated Security=True";
con.Open();
SqlCommand cmd = new SqlCommand("UPDATE [FriendRequest] SET [Friends]=(SELECT FriendRequest FROM [FriendRequest] WHERE UserName=@UserName1) WHERE UserName=@username", con);
cmd.Parameters.AddWithValue("@UserName", Page.User.Identity.Name);
cmd.Parameters.AddWithValue("@UserName1", UserNameLabel.Text);
cmd.ExecuteNonQuery();
con.Close();
}
答案 0 :(得分:0)
UserNameLabel
为null,因为FindControl
不能用于动态生成的控件(即,来自DataList)。当DataList中有多行时,您期望它如何工作?
更好的方法是利用按钮的CommandArgument
property将必要的参数传递到事件处理程序中。 MSDN有一个如何使用它的例子。
答案 1 :(得分:0)
删除FriendRequest.UserName中的额外空格,并在sql server中触发查询并检查UserName。