Возьмите идентификатор строки таблицы с response.write asp-net C#
У меня есть функция Ajax, которая имеет страницу сервера. На этой странице сервера я использую пейджинг, но есть проблема.
На странице сервера я создал таблицу через response.write
protected void Page_Load(object sender, EventArgs e)
{
int page = 1;
string key = "N";
if (Request.Form["page"] != null)
{
page = Convert.ToInt32(Request.Form["page"]);
}
if (Request.Form["key"] != null)
{
key = Convert.ToString(Request.Form["key"]);
}
List<Orders> lst = OrdersDB.OttieniOrdini(page);
Response.Write(string.Format(" <table class=\"table table-striped table-hover custab\"> "));
Response.Write("<tr><td>Id</td><td>Prezzo</td><td>Dettaglio</td><td>Voto</td><td><span class=\"fa fa-gear \"></span></td></tr>");
foreach (Orders p in lst)
{
Response.Write(string.Format("<tr><td>{0}</td><td>{1}</td><td>{2}</td>", p.Prezzo, p.Dettaglio, p.Voto ));
Response.Write(string.Format(" <td class=\"text-center\"> <asp:LinkButton class=\"btn btn-danger btn-xs\" ID=\"btnEliminaOrdine\" OnClick=\"javascript:__doPostBack('btnEliminaOrdine_Click','')\" runat=\"server\">Delete</asp:LinkButton></td> </tr>"));
}
Response.Write("</table>");
int num_page = OrdersDB.GetNumPage(key);
Response.Write("<br/>");
Response.Write(string.Format(@"<nav> <ul class = ""pagination pagination-sm""> "));
int min_page = page - 5;
if (min_page <= 0) min_page = 1;
int max_page = min_page + 9;
if (max_page > num_page) max_page = num_page;
if (min_page > 1)
{
Response.Write(string.Format(@"<li><a href=""#"" aria-label=""Previous"" onclick=""return show_page('{0}')""> <span aria-hidden=""true"">Prev</span></a> </li> ", min_page - 1));
}
for (int i = min_page; i <= max_page; i++)
{
if (i != page)
{
Response.Write(string.Format(@"<li><a href=""#"" onclick=""return show_page('{0}')"">{0}</a> </li> ", i));
}
else
Response.Write(string.Format(@" <li class=""active""><a href=""#"">{0}</a></li> ", i));
}
if (max_page < num_page)
Response.Write(string.Format(@"<li> <a href=""#"" aria-label=""Next"" onclick=""return show_page('{0}')""><span aria-hidden=""true"">Next</span></a> </li> ", max_page + 1));
Response.Write(string.Format(@"</ul> </nav> "));
}
В response.write я создал LinkButton, у которого есть функция удаления строки, когда я щелкаю по ней. По этой причине мне нужно иметь идентификатор строки для удаления.
Итак, моя проблема заключается в следующем: как я могу поймать событие click и получить Id (p.Id)?
Я пытался использовать это:
List<Orders> lst = OrdersDB.OttieniOrdini(page); //GET ORDERDER
HtmlTable table = new HtmlTable();
foreach (Orders p in lst)
{
var row = new HtmlTableRow();
var td = new HtmlTableCell();
td.InnerHtml = Convert.ToString(p.Prezzo);
row.Cells.Add(td);
td = new HtmlTableCell();
td.InnerHtml = p.Dettaglio;
row.Cells.Add(td);
td = new HtmlTableCell();
td.InnerHtml = Convert.ToString(p.Voto);
row.Cells.Add(td);
td = new HtmlTableCell();
LinkButton btnEliminaOrdine = new LinkButton();
btnEliminaOrdine.ID = "btnEliminaOrdine" + p.Id;
btnEliminaOrdine.CssClass = "btn btn-danger btn-xs";
btnEliminaOrdine.Text = "Delete";
btnEliminaOrdine.Click += new System.EventHandler(this.btnEliminaOrdine_Click);
td.Controls.Add(btnEliminaOrdine);
row.Cells.Add(td);
table.Rows.Add(row);
}
this.Controls.Add(table);
но это не работает, потому что я не вижу таблицы.. Я не знаю почему.
Можете ли вы объяснить, что мне нужно делать на странице сервера, а что на странице "клиента"?
1 ответ
Как я уже сказал в моих комментариях, скорее используйте GridView
control.It сделает вашу жизнь намного проще. Он автоматически отображает HTML-таблицу и имеет встроенную поддержку подкачки страниц. Вот полный пример:
Web.config:
Сначала добавьте строку подключения к базе данных SQL в Web.config
<connectionStrings>
<add name="conn" connectionString="Your connection string goes here" providerName="System.Data.SqlClient" />
</connectionStrings>
Код позади:
public partial class DisplayGridViewWithPaging : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if(!Page.IsPostBack)
{
this.GetData();
}
}
private void GetData()
{
DataTable table = this.GetEmails();
GridView1.DataSource = table;
GridView1.DataBind();
}
private DataTable GetEmails()
{
var table = new DataTable();
//Connection for the database from the Web.config file
string connectionString = ConfigurationManager.ConnectionStrings["conn"].ConnectionString;
using (var connection = new SqlConnection(connectionString))
{
using (var command = new SqlCommand("SELECT EmailType, EmailAddress FROM EmailNotifications", connection))
{
using (var a = new SqlDataAdapter(command))
{
connection.Open();
a.Fill(table);
connection.Close();
}
}
}
return table;
}
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView1.PageIndex = e.NewPageIndex;
this.GetData();
}
}
.aspx:
<asp:GridView ID="GridView1"
runat="server"
AllowPaging="true"
PageSize="5"
AutoGenerateColumns="false"
OnPageIndexChanging="GridView1_PageIndexChanging">
<Columns>
<asp:BoundField DataField="EmailType" HeaderText="Email Type" />
<asp:BoundField DataField="EmailAddress" HeaderText="Email Address" />
</Columns>
</asp:GridView>