再次单击按钮时绑定 HTML table
Bind HTML table on button click again
我的代码隐藏中有 HTML table,它将在页面加载时绑定数据。
现在我有一个按钮可以将数据插入数据库。我的问题是当我在单击按钮时插入数据时,我的页面得到回发。我的 html table 数据将只显示旧数据而不是我添加的新数据。因为 html table 首先在页面加载中绑定,然后我的控件将转到 button_click 事件。
我试图将 ispostback 放在 page_load 上,但是第一次当页面获取加载时 html table 没有显示任何数据。
我该如何解决这个问题。
protected void Page_Load(object sender, EventArgs e)
{
using (SqlCommand cmd = new SqlCommand())
{
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
cmd.CommandText = "Select * from Ticket";
conn.Open();
SqlDataReader dr = cmd.ExecuteReader();
// //Building an HTML string.
StringBuilder html = new StringBuilder();
//Table start.
html.Append("<table id='tbldata' style='table-layout:fixed;' border='0'>");
html.Append("<THEAD>");
html.Append("<TR>");
html.Append("<TH>Ticket</TH>");
html.Append("<TH>Priority</TH>");
html.Append("<TH>Status<div class='fildownarrow'></div></TH>");
html.Append("<TH>Practice Name<div class='fildownarrow'></div></TH>");
html.Append("<TH>Patient Name</TH>");
html.Append("<TH>Assigned</TH>");
html.Append("<TH>Subject</TH>");
html.Append("<TH style='width:100px;><a href='#'><div class='filtericon'></div></a></TH>");
html.Append("</TR>");
html.Append("</THEAD>");
if (dr.HasRows)
{
while (dr.Read())
{
html.Append("<tbody>");
html.Append("<tr>");
html.Append("<td>" + dr["Ticket_no"] + "</td>");
html.Append("<td>" + dr["Priority"] + "</td>");
html.Append("<td>" + dr["Status"] + "</td>");
html.Append("<td>" + dr["Practice_Name"] + "</td>");
html.Append("<td>" + dr["Patient_Name"] + "</td>");
html.Append("<td>" + dr["Assign_User_Name"] + "</td>");
html.Append("<td>" + dr["Msg_Subject"] + "</td>");
html.Append("</tr>");
html.Append("</tbody>");
}
}
//Table end.
html.Append("</table>");
//Append the HTML string to Placeholder.
PlaceHolder1.Controls.Add(new Literal { Text = html.ToString() });
dr.Close();
dr.Dispose();
}
如果您在检查 IsPostBack 属性 时在页面加载时得到空 table,我认为您正在检查它的值是否为真。所以 table 只会在回发时加载。您应该检查 IsPostBack 属性 值是否为 false 以仅显示内容页面的第一次加载。
protected void Page_Load(object sender, EventArgs e)
{
if(!Page.IsPostBack)
{
using (SqlCommand cmd = new SqlCommand())
{
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
cmd.CommandText = "Select * from Ticket";
conn.Open();
SqlDataReader dr = cmd.ExecuteReader();
// //Building an HTML string.
StringBuilder html = new StringBuilder();
//Table start.
html.Append("<table id='tbldata' style='table-layout:fixed;' border='0'>");
html.Append("<THEAD>");
html.Append("<TR>");
html.Append("<TH>Ticket</TH>");
html.Append("<TH>Priority</TH>");
html.Append("<TH>Status<div class='fildownarrow'></div></TH>");
html.Append("<TH>Practice Name<div class='fildownarrow'></div></TH>");
html.Append("<TH>Patient Name</TH>");
html.Append("<TH>Assigned</TH>");
html.Append("<TH>Subject</TH>");
html.Append("<TH style='width:100px;><a href='#'><div class='filtericon'></div></a></TH>");
html.Append("</TR>");
html.Append("</THEAD>");
if (dr.HasRows)
{
while (dr.Read())
{
html.Append("<tbody>");
html.Append("<tr>");
html.Append("<td>" + dr["Ticket_no"] + "</td>");
html.Append("<td>" + dr["Priority"] + "</td>");
html.Append("<td>" + dr["Status"] + "</td>");
html.Append("<td>" + dr["Practice_Name"] + "</td>");
html.Append("<td>" + dr["Patient_Name"] + "</td>");
html.Append("<td>" + dr["Assign_User_Name"] + "</td>");
html.Append("<td>" + dr["Msg_Subject"] + "</td>");
html.Append("</tr>");
html.Append("</tbody>");
}
}
//Table end.
html.Append("</table>");
//Append the HTML string to Placeholder.
PlaceHolder1.Controls.Add(new Literal { Text = html.ToString() });
dr.Close();
dr.Dispose();
}
}
}
你应该这样组织你的代码:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
LoadData();
}
}
protected void Button1_Click(object sender, EventArgs e)
{
//Write data to database
LoadData();
}
private void LoadData()
{
using (SqlCommand cmd = new SqlCommand())
{
//Here goes your sql code that reads the database
}
}
当然,更好的解决方案是使用像 GridView 这样的控件并将数据直接绑定到它。
我的代码隐藏中有 HTML table,它将在页面加载时绑定数据。
现在我有一个按钮可以将数据插入数据库。我的问题是当我在单击按钮时插入数据时,我的页面得到回发。我的 html table 数据将只显示旧数据而不是我添加的新数据。因为 html table 首先在页面加载中绑定,然后我的控件将转到 button_click 事件。
我试图将 ispostback 放在 page_load 上,但是第一次当页面获取加载时 html table 没有显示任何数据。
我该如何解决这个问题。
protected void Page_Load(object sender, EventArgs e)
{
using (SqlCommand cmd = new SqlCommand())
{
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
cmd.CommandText = "Select * from Ticket";
conn.Open();
SqlDataReader dr = cmd.ExecuteReader();
// //Building an HTML string.
StringBuilder html = new StringBuilder();
//Table start.
html.Append("<table id='tbldata' style='table-layout:fixed;' border='0'>");
html.Append("<THEAD>");
html.Append("<TR>");
html.Append("<TH>Ticket</TH>");
html.Append("<TH>Priority</TH>");
html.Append("<TH>Status<div class='fildownarrow'></div></TH>");
html.Append("<TH>Practice Name<div class='fildownarrow'></div></TH>");
html.Append("<TH>Patient Name</TH>");
html.Append("<TH>Assigned</TH>");
html.Append("<TH>Subject</TH>");
html.Append("<TH style='width:100px;><a href='#'><div class='filtericon'></div></a></TH>");
html.Append("</TR>");
html.Append("</THEAD>");
if (dr.HasRows)
{
while (dr.Read())
{
html.Append("<tbody>");
html.Append("<tr>");
html.Append("<td>" + dr["Ticket_no"] + "</td>");
html.Append("<td>" + dr["Priority"] + "</td>");
html.Append("<td>" + dr["Status"] + "</td>");
html.Append("<td>" + dr["Practice_Name"] + "</td>");
html.Append("<td>" + dr["Patient_Name"] + "</td>");
html.Append("<td>" + dr["Assign_User_Name"] + "</td>");
html.Append("<td>" + dr["Msg_Subject"] + "</td>");
html.Append("</tr>");
html.Append("</tbody>");
}
}
//Table end.
html.Append("</table>");
//Append the HTML string to Placeholder.
PlaceHolder1.Controls.Add(new Literal { Text = html.ToString() });
dr.Close();
dr.Dispose();
}
如果您在检查 IsPostBack 属性 时在页面加载时得到空 table,我认为您正在检查它的值是否为真。所以 table 只会在回发时加载。您应该检查 IsPostBack 属性 值是否为 false 以仅显示内容页面的第一次加载。
protected void Page_Load(object sender, EventArgs e)
{
if(!Page.IsPostBack)
{
using (SqlCommand cmd = new SqlCommand())
{
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
cmd.CommandText = "Select * from Ticket";
conn.Open();
SqlDataReader dr = cmd.ExecuteReader();
// //Building an HTML string.
StringBuilder html = new StringBuilder();
//Table start.
html.Append("<table id='tbldata' style='table-layout:fixed;' border='0'>");
html.Append("<THEAD>");
html.Append("<TR>");
html.Append("<TH>Ticket</TH>");
html.Append("<TH>Priority</TH>");
html.Append("<TH>Status<div class='fildownarrow'></div></TH>");
html.Append("<TH>Practice Name<div class='fildownarrow'></div></TH>");
html.Append("<TH>Patient Name</TH>");
html.Append("<TH>Assigned</TH>");
html.Append("<TH>Subject</TH>");
html.Append("<TH style='width:100px;><a href='#'><div class='filtericon'></div></a></TH>");
html.Append("</TR>");
html.Append("</THEAD>");
if (dr.HasRows)
{
while (dr.Read())
{
html.Append("<tbody>");
html.Append("<tr>");
html.Append("<td>" + dr["Ticket_no"] + "</td>");
html.Append("<td>" + dr["Priority"] + "</td>");
html.Append("<td>" + dr["Status"] + "</td>");
html.Append("<td>" + dr["Practice_Name"] + "</td>");
html.Append("<td>" + dr["Patient_Name"] + "</td>");
html.Append("<td>" + dr["Assign_User_Name"] + "</td>");
html.Append("<td>" + dr["Msg_Subject"] + "</td>");
html.Append("</tr>");
html.Append("</tbody>");
}
}
//Table end.
html.Append("</table>");
//Append the HTML string to Placeholder.
PlaceHolder1.Controls.Add(new Literal { Text = html.ToString() });
dr.Close();
dr.Dispose();
}
}
}
你应该这样组织你的代码:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
LoadData();
}
}
protected void Button1_Click(object sender, EventArgs e)
{
//Write data to database
LoadData();
}
private void LoadData()
{
using (SqlCommand cmd = new SqlCommand())
{
//Here goes your sql code that reads the database
}
}
当然,更好的解决方案是使用像 GridView 这样的控件并将数据直接绑定到它。