Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Edit,Update,Cancel в DataGrid / 13 сообщений из 13, страница 1 из 1
09.02.2006, 16:16
    #33534814
nightshine
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Edit,Update,Cancel в DataGrid
В этом коде создаю дата грид, ложу в него 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
}
}
...
Рейтинг: 0 / 0
10.02.2006, 11:24
    #33536475
jprs9
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Edit,Update,Cancel в DataGrid
а почему бы тебе не добавлять колонки через Designer (columns в DataGrid'e)?
а UpdateCommand не работает,т.к. у тебя в
private void dgReport_UpdateCommand(object source, DataGridCommandEventArgs e)
{
tableReport.Enabled = false;
}
никакой update command не вызывается
...
Рейтинг: 0 / 0
10.02.2006, 11:40
    #33536522
nightshine
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Edit,Update,Cancel в DataGrid
Потому что я его динамически создаю, нельзя с таким гридом в дизайнере работать. А динамически создаю, чтобы класть потом в таблицу аспшную все гриды.

Cancel не работает тоже, а апдейт такой, потому, что я проверял что работает, а что нет. Я в дебагере смотрю, что он вообще туда не заходит!

Еще варианты есть? Очень надо, пожалуйста помогите кто-нибудь!!!
...
Рейтинг: 0 / 0
10.02.2006, 20:11
    #33538223
jprs9
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Edit,Update,Cancel в DataGrid
вместо

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";
...
Рейтинг: 0 / 0
10.02.2006, 20:15
    #33538230
jprs9
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Edit,Update,Cancel в DataGrid
и перехватывай их через
private void DataGrid1_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
switch(e.CommandName)
{....}
}
...
Рейтинг: 0 / 0
12.02.2006, 19:44
    #33539666
nightshine
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Edit,Update,Cancel в DataGrid
Спасибо, если сработает, с меня пиво!!! =)
...
Рейтинг: 0 / 0
13.02.2006, 04:09
    #33539811
nightshine
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Edit,Update,Cancel в DataGrid
Так, последние вести с полей: нету у editCol свойства CommandName!!!
Так что таким образом ничего сделать нельзя!!!
...
Рейтинг: 0 / 0
13.02.2006, 11:34
    #33540304
jprs9
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Edit,Update,Cancel в DataGrid
ой,сорри,это для BoundColumn.
А после того как ты нажимаешь Edit,у тебя вообще эти датагриды еще существуют?Ты их каждый раз заново создаешь при отправке с сервака на клиент?Или только один раз?
...
Рейтинг: 0 / 0
13.02.2006, 13:03
    #33540613
nightshine
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Edit,Update,Cancel в DataGrid
Для BoundColumn тоже таких свойств нет! Можно при перехвате события у EventArg запросить CommandName, но так как события слетают, то всегда выводится EditCommand.

Написано так, что создается динамически и засунуть подписку на события при каждом Page_Load или Page_Init нельзя, так как создается много гридов и все суются в одну большую таблицу! Вот думаю, можно ли как-то выкрутиться, или не получится и придется переписывать код заново. Про то что на каждый постбек слетают все события у грида я в курсе =))) Думаю как сделать, чтобы не слетали не меняя код координально. Думаю даже все по новой написать.
...
Рейтинг: 0 / 0
13.02.2006, 13:37
    #33540761
jprs9
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Edit,Update,Cancel в DataGrid
ButtonColumn,опечаточка вышла 0:)
Может ты эту большую таблицу будешь в Session кидать и каждый раз ее оттуда вытаскивать?
...
Рейтинг: 0 / 0
13.02.2006, 14:54
    #33541053
nightshin e
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Edit,Update,Cancel в DataGrid
Это, конечно, прикольно, но в итоге кнопка там одна и ей присваивается последнее значение. А нужно, чтобы была одна Edit сначала, а когда на нее нажимаешь - появлялись две: Update и Cancel. Пока по прежнему одна кнопка.
Вот думаю сделать три разные, в разных столбцах =))) может так прокатит?
Или в один TemplateColumn класть по очереди три? Тоже вроде вариант. Короче спасибо в любом случае, сделаю - отпишусь, еще один вариант наклевывается, но придется менять код, а этого делать очень не хочется!
...
Рейтинг: 0 / 0
13.02.2006, 15:15
    #33541136
jprs9
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Edit,Update,Cancel в DataGrid
не знаю,editcommandcolumn должна работать,единственное что тебе придется во ViewState запоминать эту колонку,чтоб знать какое значение ввел юзер...
а у тебя при нажатии на Edit появляется две кнопки:Update and Cancel?
...
Рейтинг: 0 / 0
27.02.2006, 17:28
    #33568685
jprs9
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Edit,Update,Cancel в DataGrid
в общем похоже проблема в том что в Page_Loade нету проверки на If(!IsPostBack) и при нажатии Update весь грид заново прорисовывается и поэтому не идет по евенту этой кнопки,т.к. ее как бы не сущетсвует еще(т.е. уже,т.к. грид перерисовался)
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Edit,Update,Cancel в DataGrid / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]