通过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("   "+"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中的数据表在asp gridview中添加按钮列