数据列表中的标签错误对象引用未设置为对象的实例

时间:2012-09-15 12:24:50

标签: c# html sql datalist

:) 我希望在生成基于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();
    }

2 个答案:

答案 0 :(得分:0)

UserNameLabel为null,因为FindControl不能用于动态生成的控件(即,来自DataList)。当DataList中有多行时,您期望它如何工作?

更好的方法是利用按钮的CommandArgument property将必要的参数传递到事件处理程序中。 MSDN有一个如何使用它的例子。

答案 1 :(得分:0)

删除FriendRequest.UserName中的额外空格,并在sql server中触发查询并检查UserName。