【问题标题】:Delete element from div in div with a button generated from code behind使用从后面的代码生成的按钮从 div 中的 div 中删除元素
【发布时间】:2017-05-26 15:15:18
【问题描述】:

我有一个 asp.net 应用程序,其中有一个用户可以在其中发布消息的页面。这些消息是从数据库中检索出来的,它们正手存储在我的页面加载部分中的代码后面。对于每条消息,都会生成一个新的 div,其中另一个 div 用于消息,另一个 div 用于用户名。为每个单独的帖子制作一个按钮,问题是我希望该按钮从 div 中删除帖子(因此是数据库中的消息)。但我不知道该怎么做,因为一切都是在后面的代码中生成的。也许 FindControl() 可以提供帮助?

String connString = System.Configuration.ConfigurationManager.ConnectionStrings["WebAppConnString"].ToString();
            conn = new MySqlConnection(connString);               
            conn.Open();
            queryStr = "SELECT berichtID ,bericht, user FROM tblforum ORDER BY berichtID DESC";
            cmd = new MySqlCommand(queryStr, conn);
            MySqlDataReader Reader = cmd.ExecuteReader();
        try {
            while (Reader.Read())
            {
                ImageButton Button = new ImageButton();
                Button.ImageUrl = "https://cdn4.iconfinder.com/data/icons/ionicons/512/icon-ios7-gear-512.png";
                HtmlGenericControl User = new HtmlGenericControl("div");
                HtmlGenericControl Div = new HtmlGenericControl("div");
                HtmlGenericControl Username = new HtmlGenericControl("p");
                HtmlGenericControl Message = new HtmlGenericControl("p");
                Button.Style.Add("max-height", "inherit");
                Button.Style.Add("width", "auto");
                Button.Style.Add("float", "right");
                Username.InnerText = Reader["user"].ToString() + " said: ";
                Div.Style.Add("border-bottom", "6px solid black");
                Div.Style.Add("background-color", "#006633");
                Message.Style.Add("color", "#d3d3d3");
                forumsection.Controls.Add(Div);
                Message.InnerText = Reader["bericht"].ToString();
                Div.Controls.Add(User);
                User.Controls.Add(Button);
                User.Controls.Add(Username);
                Div.Controls.Add(Message);
            }
            Reader.Close();
        }

谢谢

【问题讨论】:

  • 您需要显示一些代码来解释您尝试过的内容以及无效的内容。通常,div 不是服务器端控件,因此需要一些额外的工作才能使其对服务器端代码可见。听起来您正在尝试模拟数据绑定控件,例如中继器或网格视图。您最好将这些作为显示数据的选项进行调查。
  • 已更新,是的,我希望数据像 gridview 一样绑定,但没有它。可视化:gipa3.ga/Gastenboek.aspx
  • 所以您希望按钮删除关联的 div 并向数据库发出 DELETE 命令?
  • 是的,你没看错

标签: asp.net


【解决方案1】:

试试这个...

        protected void Page_Load(object sender, EventArgs e)
        {
            DisplayData();
        }

        private void DisplayData()
        {
            //your code
            string connString = System.Configuration.ConfigurationManager.ConnectionStrings["WebAppConnString"].ToString();
            conn = new MySqlConnection(connString);
            conn.Open();
            queryStr = "SELECT berichtID ,bericht, user FROM tblforum ORDER BY berichtID DESC";
            cmd = new MySqlCommand(queryStr, conn);
            MySqlDataReader Reader = cmd.ExecuteReader();
            try
            {
                while (Reader.Read())
                {
                    ImageButton Button = new ImageButton();                        
                    Button.ImageUrl = "https://cdn4.iconfinder.com/data/icons/ionicons/512/icon-ios7-gear-512.png";
                    //**************ADD THIS TO FIRE DELETE*************
                    Button.Click += Button_Click;
                    Button.ID = "btnForDBItem_" + Reader.GetOrdinal("berichtID").ToString();
                    //**************END OF FIRE DELETE*****************
                    HtmlGenericControl User = new HtmlGenericControl("div");
                    HtmlGenericControl Div = new HtmlGenericControl("div");
                    HtmlGenericControl Username = new HtmlGenericControl("p");
                    HtmlGenericControl Message = new HtmlGenericControl("p");
                    Button.Style.Add("max-height", "inherit");
                    Button.Style.Add("width", "auto");
                    Button.Style.Add("float", "right");
                    Username.InnerText = Reader["user"].ToString() + " said: ";
                    Div.Style.Add("border-bottom", "6px solid black");
                    Div.Style.Add("background-color", "#006633");
                    Message.Style.Add("color", "#d3d3d3");
                    forumsection.Controls.Add(Div);
                    Message.InnerText = Reader["bericht"].ToString();
                    Div.Controls.Add(User);
                    User.Controls.Add(Button);
                    User.Controls.Add(Username);
                    Div.Controls.Add(Message);
                }
                Reader.Close();
            }
            catch(Exception ex)
            {
                throw ex;
            }
        }

        private void Button_Click(object sender, ImageClickEventArgs e)
        {
            //add your database code to do the DELETE here
            ImageButton btn = (ImageButton)sender;
            var IDtoDELETE = btn.ID.Replace("btnForDBItem_",""); 
            //now call DisplayData() to regenerate the page without the deleted item
            DisplayData();
        }

【讨论】:

  • 有没有办法调用Message

    的id或者string放到MySQL语句中?另外,您能解释一下为什么将 ID 设置为 null 吗?

  • 如果您查看我最初在 DisplayData 函数中分配按钮 ID 的位置,我实际上做了什么,将其命名为“btnForDBItem_X”,其中 X = 数据库列“berichtID”中的 ID只是我对您要删除的主键列的猜测。 Button_Click 中的 btn.ID.Replace 只是从单击按钮的 ID 中去除所有不必要的文本,因此您拥有制作删除 SQL 所需的原始 ID。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-24
  • 2018-08-18
  • 2011-09-23
  • 2021-07-16
相关资源
最近更新 更多