обработка событий в динамическoм table asp.net
Здраствуйте коллеги. Я новичек в ASP и столкулся с проблемой.
Нужна помощь с динамической таблицей table.
Как реализовать обработку событий (редактирование,удаление) так как при нажатии LinkButtona она пропадает.Связано как я понял с IsPostBack.События не вызываються.
namespace test2012 { public class MyLinkButton : LinkButton { public Object userData; } public partial class MagicTable : System.Web.UI.UserControl { private Table table; private int startRow; private int maxRows; private MyLinkButton[] pageButtons; private MyLinkButton[] deleteButtons; private MyLinkButton[] editButtons; private void BuildCaption() { TableRow caption = new TableRow(); TableCell action = new TableCell(); action.Text = "action"; action.ForeColor = Color.White; action.BackColor = Color.Blue; caption.Cells.Add( action ); TableCell name = new TableCell(); name.Text = "full name"; name.ForeColor = Color.White; name.BackColor = Color.Blue; caption.Cells.Add( name ); TableCell salary = new TableCell(); salary.Text = "salary"; salary.ForeColor = Color.White; salary.BackColor = Color.Blue; caption.Cells.Add( salary ); table.Rows.Add( caption ); } private void RefreshTable() { table.Rows.Clear(); BuildCaption(); DataSourceSelectArguments args = new DataSourceSelectArguments(); // <---- don't work args.AddSupportedCapabilities( DataSourceCapabilities.Page ); args.AddSupportedCapabilities( DataSourceCapabilities.RetrieveTotalRowCount ); args.StartRowIndex = startRow; args.MaximumRows = maxRows; DataView dv = ( DataView )EmpSqlDataSource.Select( args ); int index = 0; foreach( DataRowView d in dv ) { if( index < startRow ) { index++; continue; } if( index == startRow + maxRows ) break; TableRow row = new TableRow(); deleteButtons[ index - startRow ].userData = d[ "Emp_id " ]; TableCell action = new TableCell(); action.Controls.Add( deleteButtons[ index - startRow ] ); action.Controls.Add( editButtons[ index - startRow ] ); row.Cells.Add( action ); TableCell name = new TableCell(); name.Text = d[ "First_name" ].ToString() + " " + d[ "Last_name" ].ToString(); row.Cells.Add( name ); TableCell salary = new TableCell(); salary.Text = d[ "Salary" ].ToString(); row.Cells.Add( salary ); table.Rows.Add( row ); index++; } for( int i = 0; i < pageButtons.Length; i++ ) { pageButtons[ i ].Enabled = i != startRow / maxRows; pageButtons[ i ].Visible = i < dv.Count / maxRows + ( dv.Count % maxRows != 0 ? 1 : 0 ); } } protected void Page_Init(object sender, EventArgs e) { BuildCaption(); RefreshTable(); startRow = 0; maxRows = 10; if (Page.IsPostBack) { table = new Table(); Controls.Add(table); pageButtons = new MyLinkButton[10]; for (int i = 0; i < pageButtons.Length; i++) { pageButtons[i] = new MyLinkButton(); pageButtons[i].userData = i; pageButtons[i].Text = (i + 1).ToString(); pageButtons[i].Click += (s, ee) => { startRow = maxRows * (int)((MyLinkButton)s).userData; RefreshTable(); }; Controls.Add(pageButtons[i]); } deleteButtons = new MyLinkButton[maxRows]; editButtons = new MyLinkButton[maxRows]; for (int i = 0; i < maxRows; i++) { deleteButtons[i] = new MyLinkButton(); deleteButtons[i].Text = "Delete "; deleteButtons[i].Click += CoolDelete; editButtons[i] = new MyLinkButton(); editButtons[i].Text = "Edit"; editButtons[i].Click += CoolEdit; } } } protected void Page_Load(object sender, EventArgs e) { startRow = 0; maxRows = 10; if (IsPostBack) { table = new Table(); Controls.Add(table); pageButtons = new MyLinkButton[10]; for (int i = 0; i < pageButtons.Length; i++) { pageButtons[i] = new MyLinkButton(); pageButtons[i].userData = i; pageButtons[i].Text = (i + 1).ToString(); pageButtons[i].Click += (s, ee) => { startRow = maxRows * (int)((MyLinkButton)s).userData; RefreshTable(); }; Controls.Add(pageButtons[i]); } deleteButtons = new MyLinkButton[maxRows]; editButtons = new MyLinkButton[maxRows]; for (int i = 0; i < maxRows; i++) { deleteButtons[i] = new MyLinkButton(); deleteButtons[i].Text = "Delete "; deleteButtons[i].Click += CoolDelete; editButtons[i] = new MyLinkButton(); editButtons[i].Text = "Edit"; editButtons[i].Click += CoolEdit; } } } protected void JobDropDownList_DataBound( object sender, EventArgs e ) { RefreshTable(); } protected void JobDropDownList_SelectedIndexChanged( object sender, EventArgs e ) { RefreshTable(); } protected void CoolDelete( object sender, EventArgs e ) { EmpSqlDataSource.DeleteParameters.Clear(); EmpSqlDataSource.DeleteParameters.Add( "Emp_id_", ( ( MyLinkButton )sender ).userData.ToString() ); EmpSqlDataSource.Delete(); RefreshTable(); }
2 коментарі
Додати коментар Підписатись на коментаріВідписатись від коментарів