Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Кривой page'нг DataGrid'а при bind'инге в OnInit / 11 сообщений из 11, страница 1 из 1
15.09.2006, 14:32
    #33990414
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кривой page'нг DataGrid'а при bind'инге в OnInit
ЭстЪ DataGrid в котором ЭстЪ control'ы. Соответственно, приходится его bind'ить в OnInit. Но из-за этого - слетает page'нг Ж8-/ Т.е. вперед еще типа корректно листается. А, вот назад...
Навал дрозофилку и увидел, что если bind'ить в OnLoad - то все сухо... Вот такая загогулина получается... И как теперь такую ситуацию разрулить?
"Helo, word!" - 17 errors 56 warnings
...
Рейтинг: 0 / 0
15.09.2006, 16:08
    #33990826
left_join
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кривой page'нг DataGrid'а при bind'инге в OnInit
ну и бинди на OnLoad, если там "все сухо" :)
...
Рейтинг: 0 / 0
15.09.2006, 16:46
    #33990974
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кривой page'нг DataGrid'а при bind'инге в OnInit
блЫн... постил из Форум "DataGrid, DataList, Repeater" - там при'attach'ена дрозофила, а тут - ее не видать

left_join
ну и бинди на OnLoad, если там "все сухо" :)

Ex_Soft
DataGrid в котором ЭстЪ control'ы. Соответственно, приходится его bind'ить в OnInit

что бы из значения после OnInit нахлопнулись и их можно было заюзать в OnLoad
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
void Page_Init(Object sender, EventArgs e)
		{
			if((ds=(DataSet)Session[SessionId])==null)
			{
				ds=new DataSet();
				ds.Tables.Add("TableStatic");
				ds.Tables.Add("TableDynamic");
				ds.Tables["TableDynamic"].Columns.Add(CheckedFieldName,typeof(bool));
				Session[SessionId]=ds;

				OleDbConnection
					connection=new OleDbConnection(connstring);
      
				OleDbDataAdapter
					da=new OleDbDataAdapter("select * from books order by title, number",connection);
              
				da.Fill(ds.Tables["TableStatic"]);
				da.Fill(ds.Tables["TableDynamic"]);
				ds.Tables["TableDynamic"].PrimaryKey=new DataColumn[]{ds.Tables["TableDynamic"].Columns["Id"]};
			}

			MyDataGridInit.DataSource=ds.Tables["TableStatic"];
			MyDataGridInit.DataBind();

			MyDataGridDynamic.DataSource=ds.Tables["TableDynamic"];
			MyDataGridDynamic.DataBind();
		}

		void Page_Load(Object sender, EventArgs e)
		{
			MyDataGridLoad.DataSource=ds.Tables["TableStatic"];
			MyDataGridLoad.DataBind();
			
			if(IsPostBack)
			{
				CheckBox
					tmpCheckBox;

				int
					tmpInt;

				DataRow
					tmpDataRow;

				foreach(DataGridItem item in MyDataGridDynamic.Items)
				{
					if((tmpCheckBox=(item.FindControl(CheckBoxSignature) as CheckBox))==null)
						continue;

					if((tmpDataRow=ds.Tables["TableDynamic"].Rows.Find(tmpInt=Convert.ToInt32(MyDataGridDynamic.DataKeys[item.ItemIndex])))!=null)
					{
						if(tmpDataRow.IsNull(CheckedFieldName) || Convert.ToBoolean(tmpDataRow[CheckedFieldName])!=tmpCheckBox.Checked)
							tmpDataRow[CheckedFieldName]=tmpCheckBox.Checked;
					}
					else
						throw(new Exception("Unknown ID: '"+tmpInt+"'"));
				}
			}
		}

private void DataGrid_PageIndexChanged(object source, DataGridPageChangedEventArgs e)
		{
			DataGrid
				tmpDataGrid;

			if((tmpDataGrid=source as DataGrid)==null)
				return;

			tmpDataGrid.CurrentPageIndex=e.NewPageIndex;
			tmpDataGrid.DataBind();
		}

		private void DataGrid_ItemDataBound(object sender, DataGridItemEventArgs e)
		{
			if(e.Item.ItemType!=ListItemType.Item
				&& e.Item.ItemType!=ListItemType.AlternatingItem)
				return;

			bool
				tmpBool = !(e.Item.DataItem as System.Data.DataRowView).Row.IsNull(CheckedFieldName) ? Convert.ToBoolean((e.Item.DataItem as System.Data.DataRowView).Row[CheckedFieldName]) : false;

			CheckBox
				tmpCheckBox;

			if((tmpCheckBox=e.Item.Cells[ 4 ].FindControl(CheckBoxSignature) as CheckBox)!=null
				&& tmpCheckBox.Checked!=tmpBool)
				tmpCheckBox.Checked=tmpBool;
		}
так понятнее?
_________________
"Helo, word!" - 17 errors 56 warnings
...
Рейтинг: 0 / 0
18.09.2006, 01:44
    #33992898
Dimon aka Manowar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кривой page'нг DataGrid'а при bind'инге в OnInit
после биндинга события срабатывать не будут.
Да и вообще зачем ты в Page_Init биндишь?

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
...
Рейтинг: 0 / 0
18.09.2006, 13:09
    #33993732
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кривой page'нг DataGrid'а при bind'инге в OnInit
left_join
ну и бинди на OnLoad

Dimon aka Manowar
Да и вообще зачем ты в Page_Init биндишь?

Так... ПрЫехали...
Неужели я так туманно/запутанно описываю проблему? Попробую Ышо раз.
ЭстЪ DataGrid с control'ом, 4 example, CheckBox.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<asp:DataGrid ID="MyDataGridDynamic" ... >
  <Columns>
    ...
    <asp:TemplateColumn>
      <ItemTemplate>
        <asp:CheckBox ID="tmpCheckBox" Runat="server" />
      </ItemTemplate>
    </asp:TemplateColumn>
    ...
  </Columns>
</asp:DataGrid>
Юзвер там check'ает, что ему нуна...
Покурив Understanding ASP.NET View State , только при bind'инге в OnInit'е можно добиться нахлопывания PostData на CheckBox'ы, чтобы потом можно было бы прочитать их значения в OnLoad'е.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
void Page_Load(Object sender, EventArgs e)
{
...
if(IsPostBack)
{
foreach(DataGridItem item in MyDataGridDynamic.Items)
{
	if((tmpCheckBox=(item.FindControl(CheckBoxSignature) as CheckBox))==null)
		continue;

	if((tmpDataRow=ds.Tables["TableDynamic"].Rows.Find(tmpInt=Convert.ToInt32(MyDataGridDynamic.DataKeys[item.ItemIndex])))!=null)
	{
		if(tmpDataRow.IsNull(CheckedFieldName) || Convert.ToBoolean(tmpDataRow[CheckedFieldName])!=tmpCheckBox.Checked)
			tmpDataRow[CheckedFieldName]=tmpCheckBox.Checked;
	}
	else
		throw(new Exception("Unknown ID: '"+tmpInt+"'"));
}
}
...
}
Иначе, если bind'ить в OnLoad'е, в LoadPostbackData не нахлопываются данные о CheckBox'ах (их просто напросто еще не накого накатывать, поскольку они еще не созданы, ведь LoadPostbackData, согласно этому , вызывается ПЕРЕД OnLoad ). Если bind'ить в OnLoad - прийдется тогда самому разбирать Request.Form. А этого делать не хочеться
Или я что-то/где-то не так понял/упустил?

Вот я и пытаюсь выяснить: это - лечиться? Или - в морг? Если нЭт - то тогда, ессесно, прийдется самому руками разруливать


P.S. В дрозофиле четко видно, что если, 4 example, установить в "кривых" (1-м и 3-м) DataGrid'а 3-ю страницу и начать гулять по "правильному" (2-му), то у "неправильных" данные остаются 3-й страницы, а Pager устанавливается на 1-ю . Видать это, мо, в LoadViewState что-то ломается?

P.P.S.
Dimon aka Manowar
после биндинга события срабатывать не будут.

Какие имеются
в виду события? OnPageIndexChanged - срабатывает... Да и события control'ов, лежащих в DataGrid'е, как раз в таком варианте и срабатывают, 4 example, OnClick для Button'ов, OnCheckedChanged для CheckBox'ов...
_________________
"Helo, word!" - 17 errors 56 warnings
...
Рейтинг: 0 / 0
18.09.2006, 14:45
    #33994162
Dimon aka Manowar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кривой page'нг DataGrid'а при bind'инге в OnInit
Ниче не понимаю.
А почему нельзя биндить как обычно в Page_Load при !IsPostBack один раз, а потом все из вьюстейта ловить? У тя ж все статикой, как я понимаю, идет?

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
...
Рейтинг: 0 / 0
18.09.2006, 15:13
    #33994282
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кривой page'нг DataGrid'а при bind'инге в OnInit
Dimon aka Manowar
а потом все из вьюстейта ловить

как? самому? руками?
_________________
"Helo, word!" - 17 errors 56 warnings
...
Рейтинг: 0 / 0
18.09.2006, 20:33
    #33995229
Dimon aka Manowar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кривой page'нг DataGrid'а при bind'инге в OnInit
Зачем самому? Грид при постбеке сам поднимется.

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
...
Рейтинг: 0 / 0
18.09.2006, 22:58
    #33995374
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кривой page'нг DataGrid'а при bind'инге в OnInit
Dimon aka Manowar
Грид при постбеке сам поднимется.

блЫн...
Димон, фиг с ним - с гридом-то... Мне нуна, что бы конторолы накатились. Ну вот, не поленись, скачай дрозофилку и перенеси bind'инг 3-го DataGrid'а из OnInit в OnLoad. Затем за'check'ай CheckBox и за'submit'ь форму и посмотри будет ли у тебя в OnLoad (при bind'инге в OnLoad) в
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
void Page_Load(Object sender, EventArgs e)
{
...
if(IsPostBack)
{
foreach(DataGridItem item in MyDataGridDynamic.Items)
{
	if((tmpCheckBox=(item.FindControl(CheckBoxSignature) as CheckBox))==null)
		continue;

	if((tmpDataRow=ds.Tables["TableDynamic"].Rows.Find(tmpInt=Convert.ToInt32(MyDataGridDynamic.DataKeys[item.ItemIndex])))!=null)
	{
		if(tmpDataRow.IsNull(CheckedFieldName) || Convert.ToBoolean(tmpDataRow[CheckedFieldName])!=tmpCheckBox.Checked)
			tmpDataRow[CheckedFieldName]=tmpCheckBox.Checked;
	}
	else
		throw(new Exception("Unknown ID: '"+tmpInt+"'"));
}
}
...
}
хотя бы один CheckBox за'check'аный... У меня - ни один.

P.S. FW 1.1 (мо из-за этого мы грим на разных языках
)

P.P.S. 2 Dimon aka Manowar
Если не в облом - глянь в личку, pls... Мо, все-таки, по аське прийдем к консенсусу/взаимопониманию и заборем сию фишку...
_________________
"Helo, word!" - 17 errors 56 warnings
...
Рейтинг: 0 / 0
19.09.2006, 01:59
    #33995488
Dimon aka Manowar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кривой page'нг DataGrid'а при bind'инге в OnInit
Мнэ... Вот где собака порылась...
А зачем тебе в Page_Load чекбоксы? Позже никак низзя по ним пробежаться? В обработчике Click какого-нить батона например или в PreRender?

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
...
Рейтинг: 0 / 0
19.09.2006, 11:40
    #33996145
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кривой page'нг DataGrid'а при bind'инге в OnInit
Dimon aka Manowar
Мнэ... Вот где собака порылась...

Yes
Yes
Yes
Наконец-то проблема понята - это уже пол-дела

Dimon aka Manowar
Позже никак низзя по ним пробежаться? В обработчике Click какого-нить батона

а толку? Bind'ить, то, все равно, нуна в OnInit , чтобы LoadPostBackDatat нахлопнула за'check'аность CheckBox'ов. А где уж это отлавливать - монопенисуально - ведь, согласно этому , RaisePostBackEvent идет в аккурат сразу после OnLoad .
_________________
"Helo, word!" - 17 errors 56 warnings
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Кривой page'нг DataGrid'а при bind'инге в OnInit / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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