通过asp.net中的代码向网页添加按钮并删除动态数据库条目

Posted

技术标签:

【中文标题】通过asp.net中的代码向网页添加按钮并删除动态数据库条目【英文标题】:Add button to webpage via code behind in asp.net and delete dynamic db entrys 【发布时间】:2011-07-23 18:16:10 【问题描述】:

您好我想知道是否可以在下面的代码中添加一个 asp 按钮,下面的代码将我的数据库中的图像和文本添加到我的 asp 页面上的动态 div 中:

using System.Data.Odbc;
using System.IO;

public partial class UserProfileWall : System.Web.UI.Page


    protected void Page_Load(object sender, EventArgs e)
    
        string theUserId = Session["UserID"].ToString();
        PopulateWallPosts(theUserId);
    
    private void PopulateWallPosts(string userId)
    

        using (OdbcConnection cn = new OdbcConnection("Driver=mysql ODBC 3.51 Driver; Server=localhost; Database=gymwebsite2; User=root; Password=commando;"))
        
            cn.Open();
            using (OdbcCommand cmd = new OdbcCommand("SELECT wp.WallPostings, p.PicturePath FROM WallPosting wp LEFT JOIN User u ON u.UserID = wp.UserID LEFT JOIN Pictures p ON p.UserID = u.UserID WHERE wp.UserID=" + userId + " ORDER BY idWallPosting DESC", cn))
            
                //("SELECT wp.WallPostings, p.PicturePath FROM WallPosting wp LEFT JOIN [User] u ON u.UserID = wp.UserID LEFT JOIN Pictures p ON p.UserID = u.UserID WHERE UserID=" + userId + " ORDER BY idWallPosting DESC", cn))
                using (OdbcDataReader reader = cmd.ExecuteReader())
                
                    test1.Controls.Clear();

                    while (reader.Read())
                    
                        System.Web.UI.htmlControls.HtmlGenericControl div = new System.Web.UI.HtmlControls.HtmlGenericControl("div");
                        div.Attributes["class"] = "test";
                //div.Style["float"] = "left";

                        div.ID = "test";
                        Image img = new Image();
                        img.ImageUrl = String.Format("0", reader.GetString(1));
                        // this line needs to be represented in sql syntax
                        //img.ImageUrl = "~/userdata/2/uploadedimage/batman-for-facebook.jpg";
                        img.AlternateText = "Test image";

                        div.Controls.Add(img);
                        div.Controls.Add(ParseControl(String.Format("&nbsp&nbsp "+"0", reader.GetString(0))));
                        div.Style["clear"] = "both";
                        test1.Controls.Add(div);

                    
                
            
        
    
    protected void Button1_Click(object sender, EventArgs e)
    
        string theUserId = Session["UserID"].ToString();
        using (OdbcConnection cn = new OdbcConnection("Driver=MySQL ODBC 3.51 Driver; Server=localhost; Database=gymwebsite2; User=root; Password=commando;"))
        
            cn.Open();
            using (OdbcCommand cmd = new OdbcCommand("INSERT INTO WallPosting (UserID, Wallpostings) VALUES (" + theUserId + ", '" + TextBox1.Text + "')", cn))
            
                cmd.ExecuteNonQuery();
            
        
        PopulateWallPosts(theUserId);
    

奇怪的是,如果我确实设法添加了一个类似于我添加图像的方式的按钮,我将如何调用该按钮,例如:

我想将此按钮称为“删除”并添加代码以删除我的数据库中与该 div 相关的文本,但如果有多个 div(所有命名相同的 div id=test)带有文本并且它们都有同一个asp按钮我怎么能告诉按钮只删除当前div的当前文本(在db中)?

我的数据库存储信息如下:

我想我必须使用 idwallposting 但不确定如何使用?

为了直观地展示它的外观,它可能有助于理解:

我的 css 和 asp:

div#test1 

div .test 
  width:90%; 
  z-index:1; 
  padding:27.5px; 
  border-top: thin solid #736F6E;
  border-bottom: thin solid #736F6E;
  color:#ffffff;
  margin:0 auto;
  white-space: pre;
  white-space: pre-wrap;
  white-space: pre-line;
  word-wrap: break-word;


<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder2" Runat="Server">
    <script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.5.1.min.js" type="text/javascript"></script>
<p>
    <asp:TextBox ID="TextBox1" name="TextBox1" runat="server" Rows="3" 
        Height="47px" Width="638px"></asp:TextBox>
</p>
<p>
     <asp:Button ID="Button1" runat="server" Text="Post Message" Width="98px" 
        onclick="Button1_Click" />
    </p>
<p>
</p>
    <style type="text/css">
    img border-width:0px; width:100px; height:100px;
</style>
    <div id="test1" runat="server" />


    </div>


</asp:Content>

【问题讨论】:

【参考方案1】:

为什么不给每个 div 一个唯一的 ID,比如 div.ID = "test" + idWallPostings; ?

任何元素都有非唯一的 ID 不是一个好主意。

关于您的主要问题,为什么不使用诸如 Repeater 或 ListView 之类的模板化数据控件之一并添加一个命令处理程序。然后在模板中为当前数据项的数据键添加带有命令参数的按钮。

见:http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listview.itemcommand.aspx

你可以看到按钮是如何在其点击事件中携带附加信息的:

<asp:LinkButton runat="server" 
                ID="SelectEmployeeButton" 
                Text="Add To List" 
                CommandName="AddToList" 
                CommandArgument='<%#Eval("LastName") + ", " + Eval("FirstName") %>' />

以及如何检索和使用它(使用 e.CommandArgument 访问):

  protected void EmployeesListView_OnItemCommand(object sender, ListViewCommandEventArgs e)
  
    if (String.Equals(e.CommandName, "AddToList"))
    
      // Verify that the employee ID is not already in the list. If not, add the
      // employee to the list.
      ListViewDataItem dataItem = (ListViewDataItem)e.Item;
      string employeeID = 
        EmployeesListView.DataKeys[dataItem.DisplayIndex].Value.ToString();

      if (SelectedEmployeesListBox.Items.FindByValue(employeeID) == null)
      
        ListItem item = new ListItem(e.CommandArgument.ToString(), employeeID);
        SelectedEmployeesListBox.Items.Add(item);
      
    
  

【讨论】:

因为有整个后端系统来进行样式设置加上 id 喜欢尝试坚持我的方式 还有 test + idwallposting 意味着它会以 test1 test2 eyc 的形式出现,并且不会应用 css 对 id 使用 test1 test2 等,对 css 使用 class="test" 或使用其他选择器...您也可以为删除按钮本身提供唯一 ID...然后通过投射按钮事件中的发送者对象。【参考方案2】:

要在 Visual Studio 2008 ASP.net 中使用 C# 从数据库中删除,请通过双击按钮编写以下代码:

protected void btndel_Click(object sender, EventArgs e)
    

        SqlConnection conn;
        SqlCommand cmd;
        conn = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename='C:\\Users\\THEGIRL\\Documents\\Visual Studio 2008\\WebSites\\WebSite72\\App_Data\\Database.mdf';Integrated Security=True;User Instance=True");
        conn.Open();
        cmd = new SqlCommand("Delete from logintable where username='"+txtdeluname.Text+"'",conn);
        lbldel.Text = "Record is deleted";
        cmd.ExecuteNonQuery();
        conn.Close();
    

【讨论】:

以上是关于通过asp.net中的代码向网页添加按钮并删除动态数据库条目的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET 如何在不删除以前数据的情况下向数据库单元添加其他数据

asp.net后台给动态button按钮写事件

通过asp.net中的数据表在asp gridview中添加按钮列

将标签字段添加到 asp.net 网页

在引导模式主体中动态添加的 asp.net 按钮/链接按钮 web 控件不会回发

如何为 asp.net 核心中的删除按钮应用 sweetalert 或引导模式