Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Edit,Update,Cancel в DataGrid
|
|||
|---|---|---|---|
|
#18+
В этом коде создаю дата грид, ложу в него column типа Edit, добавляю обработчики событий Edit,Update, Cancel, а обработчики событий реагируют только на Edit, а на Update и Cancel - нет!!! Ничего не понимаю, почему, все ведь одинаково!!! private void Page_Load(object sender, EventArgs e) { try { tblAddPeriod.Visible = CurrentUser.AllowEdit; BuildTable((ArrayList)Session[Params.WeekReport]); } catch(Exception ex) { ShowMessage(ex.Message); } } private void dgReport_EditCommand(object source, DataGridCommandEventArgs e) { // ((DataGrid)source).EditItemIndex = e.Item.ItemIndex; // ((DataGrid)source).DataBind(); switch(source.ToString()) { case "Edit": ((DataGrid)source).EditItemIndex = e.Item.ItemIndex; ((DataGrid)source).DataBind(); break; // Add other cases here, if there are multiple ButtonColumns in // the DataGrid control. default: lblDefinition.Text = "hh"; break; } } private void dgReport_CancelCommand(object source, DataGridCommandEventArgs e) { ((DataGrid)source).EditItemIndex = -1; ((DataGrid)source).DataBind(); } private void dgReport_UpdateCommand(object source, DataGridCommandEventArgs e) { tableReport.Enabled = false; } private void btnAddRow_Click(object sender, System.EventArgs e) { try { Period objPeriod = new Period(txtBegin.Text, txtEnd.Text); m_objVisit.CreateNew(CurrentUser, objPeriod); objPeriod = new Period(txtStartDate.Text, txtEndDate.Text); BuildPeriod(objPeriod); txtBegin.Text = string.Empty; txtEnd.Text = string.Empty; } catch (Exception ex) { ShowMessage(ex.Message); } } private void btnShow_Click(object sender, System.EventArgs e) { try { Period objPeriod = new Period(txtStartDate.Text, txtEndDate.Text); BuildPeriod(objPeriod); } catch(Exception ex) { ShowMessage(ex.Message); } } #endregion #region Web Form Designer generated code override protected void OnInit(EventArgs e) { // // CODEGEN: This call is required by the ASP.NET Web Form Designer. // InitializeComponent(); base.OnInit(e); } /// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> private void InitializeComponent() { this.btnShow.Click += new System.EventHandler(this.btnShow_Click); this.btnAddRow.Click += new System.EventHandler(this.btnAddRow_Click); this.Load += new System.EventHandler(this.Page_Load); } #endregion #region Private methods... private void BuildPeriod(Period objPeriod) { DataTable dtReport = m_objVisit.GetByUserPeriod(CurrentUser, objPeriod); m_objVisit.PrepareForWeekReport(dtReport); ArrayList lstWeeks = m_objVisit.SplitByWeeks(dtReport); Session.Add(Params.WeekReport, lstWeeks); BuildTable(lstWeeks); } private void BuildTable(ArrayList lstWeeks) { if( lstWeeks == null ) return; TimeSpan total = new TimeSpan(); tableReport.Rows.Clear(); foreach( Week week in lstWeeks ) { DataGrid dgReport = GetGridStructure(); dgReport.DataSource = week.Table; dgReport.DataBind(); TableRow row = new TableRow(); TableCell cell = new TableCell(); cell.Controls.Add(dgReport); row.Cells.Add(cell); tableReport.Rows.Add(row); AddTotalRow(STR_WEEK_TOTAL, week.TotalTime, Color.LightBlue); total += week.TotalTime; } AddTotalRow(STR_TOTAL, total, Color.LightSteelBlue); } private void AddTotalRow(string strTitle, TimeSpan total, Color bgColor) { TableCell cell = new TableCell(); TableRow row = new TableRow(); cell.HorizontalAlign = HorizontalAlign.Right; cell.Text = strTitle; row.BackColor = bgColor; row.Cells.Add(cell); tableReport.Rows.Add(row); cell = new TableCell(); row = new TableRow(); cell.HorizontalAlign = HorizontalAlign.Right; cell.Text = string.Format("Рабочее время (мин.) = {0} {1}", (int)total.TotalMinutes, "мин."); row.BackColor = bgColor; row.Cells.Add(cell); tableReport.Rows.Add(row); cell = new TableCell(); row = new TableRow(); cell.HorizontalAlign = HorizontalAlign.Right; cell.Text = string.Format("Рабочее время (час. мин.) = {0} {1} {2} {3}", (int)total.TotalHours, "ч.", total.Minutes, "мин."); row.BackColor = bgColor; row.Cells.Add(cell); tableReport.Rows.Add(row); cell = new TableCell(); row = new TableRow(); cell.HorizontalAlign = HorizontalAlign.Right; cell.Text = string.Format("Рабочее время (день.) = {0} {1} + {2} {3} {4} {5}", (int)total.TotalDays, "дней", total.Hours, "ч.", total.Minutes, "мин."); row.BackColor = bgColor; row.Cells.Add(cell); tableReport.Rows.Add(row); tableReport.CellSpacing = 0; } private DataGrid GetGridStructure() { DataGrid dgReport = new DataGrid(); dgReport.AutoGenerateColumns = false; dgReport.HeaderStyle.BackColor = Color.FromArgb(235, 235, 254); //dgReport.HeaderStyle.BorderColor = Color.LimeGreen; dgReport.HeaderStyle.HorizontalAlign = HorizontalAlign.Center; BoundColumn col = new BoundColumn(); col.DataField = DataVizit.DB_DATE_BEG; col.HeaderText = "Дата"; col.DataFormatString = "{0:d.MM.yyyy}"; col.ItemStyle.HorizontalAlign = HorizontalAlign.Center; col.ItemStyle.Width = 100; dgReport.Columns.Add(col); /* TemplateColumn tempcol = new TemplateColumn(); //col = new BoundColumn(); tempcol.ItemTemplate = (System.Web.UI.ITemplate)RowNum.ToString(); tempcol.HeaderText = "№"; tempcol.ItemStyle.HorizontalAlign = HorizontalAlign.Center; tempcol.ItemStyle.Width = 25; dgReport.Columns.Add(tempcol); */ col = new BoundColumn(); col.DataField = DataVizit.DB_DATE_BEG; col.HeaderText = "Время прихода"; col.DataFormatString = "{0:HH:mm}"; col.ItemStyle.HorizontalAlign = HorizontalAlign.Center; col.ItemStyle.Width = 100; dgReport.Columns.Add(col); col = new BoundColumn(); col.DataField = DataVizit.DB_DATE_END; col.HeaderText = "Время ухода"; col.DataFormatString = "{0:HH:mm}"; col.ItemStyle.HorizontalAlign = HorizontalAlign.Center; col.ItemStyle.Width = 100; dgReport.Columns.Add(col); col = new BoundColumn(); col.DataField = DataVizit.DB_WORK_TIME; col.HeaderText = "Время работы"; col.ItemStyle.HorizontalAlign = HorizontalAlign.Center; col.ItemStyle.Width = 100; dgReport.Columns.Add(col); if( CurrentUser.AllowEdit ) { /* EditCommandColumn editCol = new EditCommandColumn(); editCol.ButtonType = ButtonColumnType.LinkButton; editCol.EditText = "Edit"; editCol.UpdateText = "Update"; editCol.CancelText = "Cancel"; dgReport.Columns.Add(editCol); */ dgReport.EditCommand +=new DataGridCommandEventHandler(dgReport_EditCommand); dgReport.CancelCommand += new DataGridCommandEventHandler(dgReport_CancelCommand); dgReport.UpdateCommand += new DataGridCommandEventHandler(dgReport_UpdateCommand); } return dgReport; } #endregion } } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2006, 16:16 |
|
||
|
Edit,Update,Cancel в DataGrid
|
|||
|---|---|---|---|
|
#18+
а почему бы тебе не добавлять колонки через Designer (columns в DataGrid'e)? а UpdateCommand не работает,т.к. у тебя в private void dgReport_UpdateCommand(object source, DataGridCommandEventArgs e) { tableReport.Enabled = false; } никакой update command не вызывается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2006, 11:24 |
|
||
|
Edit,Update,Cancel в DataGrid
|
|||
|---|---|---|---|
|
#18+
Потому что я его динамически создаю, нельзя с таким гридом в дизайнере работать. А динамически создаю, чтобы класть потом в таблицу аспшную все гриды. Cancel не работает тоже, а апдейт такой, потому, что я проверял что работает, а что нет. Я в дебагере смотрю, что он вообще туда не заходит! Еще варианты есть? Очень надо, пожалуйста помогите кто-нибудь!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2006, 11:40 |
|
||
|
Edit,Update,Cancel в DataGrid
|
|||
|---|---|---|---|
|
#18+
вместо EditCommandColumn editCol = new EditCommandColumn(); editCol.EditText = "Edit"; editCol.UpdateText = "Update"; editCol.CancelText = "Cancel"; EditCommandColumn editCol = new EditCommandColumn(); editCol.CommandName= "Edit"; editCol.CommandName = "Update"; editCol.CommandName = "Cancel"; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2006, 20:11 |
|
||
|
Edit,Update,Cancel в DataGrid
|
|||
|---|---|---|---|
|
#18+
и перехватывай их через private void DataGrid1_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e) { switch(e.CommandName) {....} } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2006, 20:15 |
|
||
|
Edit,Update,Cancel в DataGrid
|
|||
|---|---|---|---|
|
#18+
Спасибо, если сработает, с меня пиво!!! =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2006, 19:44 |
|
||
|
Edit,Update,Cancel в DataGrid
|
|||
|---|---|---|---|
|
#18+
Так, последние вести с полей: нету у editCol свойства CommandName!!! Так что таким образом ничего сделать нельзя!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2006, 04:09 |
|
||
|
Edit,Update,Cancel в DataGrid
|
|||
|---|---|---|---|
|
#18+
ой,сорри,это для BoundColumn. А после того как ты нажимаешь Edit,у тебя вообще эти датагриды еще существуют?Ты их каждый раз заново создаешь при отправке с сервака на клиент?Или только один раз? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2006, 11:34 |
|
||
|
Edit,Update,Cancel в DataGrid
|
|||
|---|---|---|---|
|
#18+
Для BoundColumn тоже таких свойств нет! Можно при перехвате события у EventArg запросить CommandName, но так как события слетают, то всегда выводится EditCommand. Написано так, что создается динамически и засунуть подписку на события при каждом Page_Load или Page_Init нельзя, так как создается много гридов и все суются в одну большую таблицу! Вот думаю, можно ли как-то выкрутиться, или не получится и придется переписывать код заново. Про то что на каждый постбек слетают все события у грида я в курсе =))) Думаю как сделать, чтобы не слетали не меняя код координально. Думаю даже все по новой написать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2006, 13:03 |
|
||
|
Edit,Update,Cancel в DataGrid
|
|||
|---|---|---|---|
|
#18+
ButtonColumn,опечаточка вышла 0:) Может ты эту большую таблицу будешь в Session кидать и каждый раз ее оттуда вытаскивать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2006, 13:37 |
|
||
|
Edit,Update,Cancel в DataGrid
|
|||
|---|---|---|---|
|
#18+
Это, конечно, прикольно, но в итоге кнопка там одна и ей присваивается последнее значение. А нужно, чтобы была одна Edit сначала, а когда на нее нажимаешь - появлялись две: Update и Cancel. Пока по прежнему одна кнопка. Вот думаю сделать три разные, в разных столбцах =))) может так прокатит? Или в один TemplateColumn класть по очереди три? Тоже вроде вариант. Короче спасибо в любом случае, сделаю - отпишусь, еще один вариант наклевывается, но придется менять код, а этого делать очень не хочется! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2006, 14:54 |
|
||
|
Edit,Update,Cancel в DataGrid
|
|||
|---|---|---|---|
|
#18+
не знаю,editcommandcolumn должна работать,единственное что тебе придется во ViewState запоминать эту колонку,чтоб знать какое значение ввел юзер... а у тебя при нажатии на Edit появляется две кнопки:Update and Cancel? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2006, 15:15 |
|
||
|
Edit,Update,Cancel в DataGrid
|
|||
|---|---|---|---|
|
#18+
в общем похоже проблема в том что в Page_Loade нету проверки на If(!IsPostBack) и при нажатии Update весь грид заново прорисовывается и поэтому не идет по евенту этой кнопки,т.к. ее как бы не сущетсвует еще(т.е. уже,т.к. грид перерисовался) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2006, 17:28 |
|
||
|
|

start [/forum/topic.php?fid=18&msg=33534814&tid=1392945]: |
0ms |
get settings: |
6ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
24ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
32ms |
get tp. blocked users: |
5ms |
| others: | 234ms |
| total: | 335ms |

| 0 / 0 |
