powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Повторный вызов DataAdapter.Fill
25 сообщений из 25, страница 1 из 1
Повторный вызов DataAdapter.Fill
    #32882572
mucks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеется пустой dataSet.
Заливаю в него таблицу SqlAdapter.Fill(dataSet, "TableName")
Связываю таблицу с гридом, все прекрасно отображается.
Повторно вызываю SqlAdapter.Fill(dataSet, "TableName") который возвращает уже другие данные.
Грид отображает старые.
Что я не так делаю ?
Переприсвоение гриду свойств DataSource и DataMember, вызов SetDataBinding, предварительное удаление таблиц из датасета не помогают.
При просмотре в отладчике dataSet после второго вызова Fill содержит одну таблицу TableName, в которой содержатся верные данные. Грид также ссылается на верный датасет и прописан DataMember="TableName"
...
Рейтинг: 0 / 0
Повторный вызов DataAdapter.Fill
    #32883012
gerss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй
Код: plaintext
datagrid1.DataBind()
Сергей
...
Рейтинг: 0 / 0
Повторный вызов DataAdapter.Fill
    #32883119
mucks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Забыл уточнить. Я работаю с Windows.Forms
SetDataBinding в формах - это аналог DataBind в web, как я понимаю.
Это не помогло, как я говорил...
...
Рейтинг: 0 / 0
Повторный вызов DataAdapter.Fill
    #32883159
gerss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mucksЗабыл уточнить. Я работаю с Windows.Forms
SetDataBinding в формах - это аналог DataBind в web, как я понимаю.
Это не помогло, как я говорил...

Пардон. Я в последнее время больше с web.

Может, стоит попробовать
Код: plaintext
1.
2.
3.
   datagrid1.ResetDatabindings();
   datagrid1.SetDataBindings(...);
   datagrid1.Update();

Это только предположения, сам с такой ситуацией не сталкивался.
...
Рейтинг: 0 / 0
Повторный вызов DataAdapter.Fill
    #32883222
mucks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нет, не помогло.
Кстати, попутный вопрос, который должен помочь проблеме.
Если выполнить dataSet.Tables.Clear() , то грид продолжает отображать данные. Вопрос: откуда он их берет ?
...
Рейтинг: 0 / 0
Повторный вызов DataAdapter.Fill
    #32883412
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привидите код, особенно интересует как осуществляется биндинг

Код: plaintext
 uid  =  S a
...
Рейтинг: 0 / 0
Повторный вызов DataAdapter.Fill
    #32883955
mucks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Полный код довольно длинный. Вот часть, где таблица заполняется. Эта функция вызывается последовательно два раза с разным параметром. После первого раза работает, после второго грид гонит.

Код: 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.
public void AddNodeToSpecification(BaseConstrNode parNode)
{
	.... // здесь определяется строка locComString

	//dataSet = new DataSet();  // если раскомментировать, то все работает.
				
	dataGrid.DataMember = null;
	dataGrid.DataSource = null;
	dataGrid.ResetBindings();
	dataSet.Tables.Clear();

	SqlCommand locSqlCommand = new SqlCommand(locComString);
	locSqlCommand.Connection = DataAccess.Connection;
	SqlDataAdapter locSqlAdapter = new SqlDataAdapter();
	locSqlAdapter.SelectCommand = locSqlCommand;
	DataTable tempds = dataSet.Tables["Specification"];
				
	locSqlAdapter.Fill(dataSet, "Specification");

	dataSet.AcceptChanges();
	dataGrid.DataSource = dataSet;
	dataGrid.DataMember = "Specification";

	CreateColumns(rootNode); // создает стили колонок и связывает их с узлами 
			//дерева (с каждым узлом связана одна колонка с информацией)

	ShowNodeSpecification((BaseConstrNode)treeView.Nodes[0]); // добавляет стиль колонки для указанного узла в таблицу стилей грида
	treeView.Nodes[0].Checked = true;
	
	dataGrid.SetDataBinding(dataSet, "Specification");
	dataGrid.Update();
	dataGrid.Refresh();
}

Разнообразные Update, Refresh, AcceptChanges и переприсвоения DataSource добавлены в поисках истины. Первый вызов прекрасно работает без них.
...
Рейтинг: 0 / 0
Повторный вызов DataAdapter.Fill
    #32883973
mucks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Заодно код CreateColumns
Код: 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.
public void CreateColumns(BaseConstrNode parNode)
{
	String locTypeName = parNode.GetType().Name;
	if (locTypeName == "GroupConstrNode" || locTypeName == "BoxesRootNode")
	{
		String locNewColumnExpression = "";
		BoxCollection locNodeBoxes = parNode.GetBoxes();
		DataColumn locNewColumn = new DataColumn(parNode.Text, typeof(int));
		dataSet.Tables["Specification"].Columns.Add(locNewColumn);
		if (parNode.UserObject == null)
		{
			DataGridTextBoxColumn locNewColumnStyle = new DataGridTextBoxColumn();
			locNewColumnStyle.MappingName = locNewColumn.ColumnName;
			locNewColumnStyle.HeaderText = parNode.Text;
			parNode.UserObject = locNewColumnStyle;
		}

		DataGridTextBoxColumn locNewBoxColumnStyle;
		foreach (BoxNode locNode in locNodeBoxes)
		{
                   		locNewColumnExpression = locNewColumnExpression + " + [" + locNode.ConstrUIN.ToString() + "]";
			if (locNode.UserObject == null)
			{
				locNewBoxColumnStyle = new DataGridTextBoxColumn();
				locNewBoxColumnStyle.MappingName = locNode.ConstrUIN.ToString();
				locNewBoxColumnStyle.HeaderText = locNode.Text;
				locNode.UserObject = locNewBoxColumnStyle;
			}
		}
		locNewColumnExpression = locNewColumnExpression.Remove(0,2);
		locNewColumn.Expression = locNewColumnExpression;
					
	}
	foreach (BaseConstrNode locNode in parNode.Nodes)
	{
		CreateColumns(locNode);
	}

}
...
Рейтинг: 0 / 0
Повторный вызов DataAdapter.Fill
    #32884230
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуйте вместо:
Код: plaintext
1.
dataGrid.SetDataBinding(dataSet, "Specification");
это:
Код: plaintext
1.
dataGrid.DataSource = dataSet.Tables["Specification"];
...
Рейтинг: 0 / 0
Повторный вызов DataAdapter.Fill
    #32884834
mucks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, в этом случае работает.
Но все таки интересно, откуда грид берет данные, если таблицу удалили. Значит dataSet оставляет на нее ссылку где то и потом когда грид хочет получить dataMember = "Specification" возвращает именно ее. Больше мне ничего не приходит в голову. Может есть какой нибудь хитрый метод, который чистит dataSet от подобных вещей, а я о нем не знаю ?
...
Рейтинг: 0 / 0
Повторный вызов DataAdapter.Fill
    #32884891
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но все таки интересно, откуда грид берет данные, если таблицу удалили. Значит dataSet оставляет на нее ссылку где то и потом когда грид хочет получить dataMember = "Specification" возвращает именно ее. Больше мне ничего не приходит в голову. Может есть какой нибудь хитрый метод, который чистит dataSet от подобных вещей, а я о нем не знаю ?


Это баг Netframework 1.1, а в багах искать логику - неблагодарное занятие :-)))

Код: plaintext
 uid  =  S a
...
Рейтинг: 0 / 0
Повторный вызов DataAdapter.Fill
    #32894916
Han Yuriy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Возможно ты не очищал DataSet, "tablename". И каждый раз DataAdapter добавлял строки в конец таблицы "tablename". Может стоит попробовать ее очистить перед Fill ?
...
Рейтинг: 0 / 0
Повторный вызов DataAdapter.Fill
    #32894960
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Он не просто пытался очищать, но и также удалять таблицу из коллекции таблиц DataSet.

Это известный баг.

Код: plaintext
 uid  =  S a
...
Рейтинг: 0 / 0
Повторный вызов DataAdapter.Fill
    #32935644
mysvetik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
у меня тоже возникла проблема по этой теме. грид не отображает новые данные при повторном fill. вы рекомендуете использовать вместо
SetDataBinding(datasourse,datamember) строчку
mygrid.Datasource = Mydataset.tables(datamember)
а если у меня грид завязан на отношении, то есть отображает дочерние записи? (datamember в этом случае равен имени родительской таблицы.имя отношения)
...
Рейтинг: 0 / 0
Повторный вызов DataAdapter.Fill
    #32935655
кузя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mysvetikу меня тоже возникла проблема по этой теме. грид не отображает новые данные при повторном fill
опиши по шагам - как ты делаешь повторный Fill ?
...
Рейтинг: 0 / 0
Повторный вызов DataAdapter.Fill
    #32935663
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вы рекомендуете использовать вместо
SetDataBinding(datasourse,datamember) строчку
mygrid.Datasource = Mydataset.tables(datamember)

рекомендовали для случая описанного mucks , как будет у вас надо смотреть ваш код.

Код: plaintext
 uid  =  S a
...
Рейтинг: 0 / 0
Повторный вызов DataAdapter.Fill
    #32936032
mysvetik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задача в следующем: в датасете есть две таблички . Дело в том что изначально записей в этих табличках очень много (3млн). между этими табличками есть связь по нескольким полям. используется запрос для ограничения колич-ва записей (myQuery).
открывается соединение(либо OracleConnection, либо SqlConnection,либо OleDbConnection в зависимости от присоединяемой таблицы). используется соответствующий Dataadapter(приведу пример для оракла)
в датасет загружены две таблички, одна из которых с именем m_tab. Затем мы хотим присоединить ту же табличку но данные другие
m_nameRelation - имя текушего отношения между таблицами

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
daOra.SelectCommand = New OracleCommand(myQuery, oracleCn)
if mydataset.Tables.Contains(m_tab) Then
    If myDataSet.Relations.Contains(m_NameRelation) Then
        myDataSet.Relations.Clear()
    End If
    myDataSet.Tables.Remove(m_tab)
    myDataSet.AcceptChanges()
 End If
daOra.Fill(myDataSet, m_tab)
' добавляем отношение
' par_col() , child col() as datacolumn
myDataSet.Relations.Add(m_nameRelation, par_col, child_col, False)
myDataSet.AcceptChanges()
If myDataSet.Relations.Contains(m_NameRelation) Then
    Me.Datagrid1.DataSource = Nothing
    Me.Datagrid1.SetDataBinding(myDataSet, & _
    myDataSet.Relations.Item(m_NameRelation).ParentTable.TableName)
    Me.Datagrid2.DataSource = Nothing
    Me.Datagrid2.SetDataBinding(myDataSet, & _
    myDataSet.Relations.Item(m_NameRelation).ParentTable.TableName & _
    "." & m_NameRelation)
End If

На самом деле все сложнее, но смысл такой. В первый раз все срабатывает замечательно, затем мы выполняем данный код, с другим MyQuery. И на строчке Me.Datagrid2.SetDataBinding - проблема. данный грид ничего не отображает
...
Рейтинг: 0 / 0
Повторный вызов DataAdapter.Fill
    #32937392
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я правильно понял, вы показываете Master - Detail .
Порционно вы обновляете данные первого грида, а данные для второго уже загружены ранее?

Код: plaintext
 uid  =  S a
...
Рейтинг: 0 / 0
Повторный вызов DataAdapter.Fill
    #32937526
кузя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 mysvetik
если у тебя при повторном заполнении структура таблицы не изменияется (выбираются те же поля), то можно обойтись
Код: plaintext
1.
myDataSet.Tables(m_tab).Clear()
daOra.Fill(myDataSet, m_tab)
при необходимости можно использовать установку myDataSet.EnforceConstraints для временного отключения контроля целостности данных
...
Рейтинг: 0 / 0
Повторный вызов DataAdapter.Fill
    #32937574
mySvetik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, я показываю Master-Detail.
Данные для одного грида уже загружены. я порционно обновляю данные второго грида. и при повторном заполнении структура может измениться (имеется ввиду что таблица та же но отображаемые поля в гриде могут меняться)
...
Рейтинг: 0 / 0
Повторный вызов DataAdapter.Fill
    #32937602
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
структура может измениться (имеется ввиду что таблица та же но отображаемые поля в гриде могут меняться)

На первый взгяд нехорошо это.... Это у вас одна таблица или повторный запрос может осуществляться к другой?

Теперь, что у вас является Master, а что Detail. Первый грид - Master, второй - Detail?????

В данном случае можно сделать все максимально просто:
1) Не использовать DataRelation
2) Подписаться на PositionChanged объекта CurrencyManager
3) Фильтровать записи используя свойство DataView.RowFilter

Код: plaintext
 uid  =  S a
...
Рейтинг: 0 / 0
Повторный вызов DataAdapter.Fill
    #32938158
mySvetik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я попробовала не использоватьDataRelation.
Использовать PositionChanged объекта CurrencyManager.
В первом гриде у меня отображается главная таблица, во втором Detail (используя фильтр)
В общем то все получается, достаточно быстро и неплохо. Спасибо!
у меня вопрос, подскажите плиз, я хочу чтобы в первом гриде(то есть главном), не отображались строки, для которых нет подчиненных, а строки, для которых подчиненных больше 1, выделялись бы каким нить цветом. Такое можно реализовать?
...
Рейтинг: 0 / 0
Повторный вызов DataAdapter.Fill
    #32938194
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mySvetik
я хочу чтобы в первом гриде(то есть главном), не отображались строки, для которых нет подчиненных,

не возвращайте такие строки запросом.
mySvetik
а строки, для которых подчиненных больше 1, выделялись бы каким нить цветом. Такое можно реализовать?

В принципе здесь тоже можно в запросе создать дополнительное поле, в котором указывать существует больше одной подчиненной записи или нет.

Далее можно обратиться к форуму VB.NET там помнится я приводил пример как раскрашивать DataGrid по определенному условию.

Если не найдете я помогу отыскать этот топик.

Код: plaintext
 uid  =  S a
...
Рейтинг: 0 / 0
Повторный вызов DataAdapter.Fill
    #32942667
mySvetik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я нашла топик, почитала.Спасибо.
как бы с раскраской все понятно, но как быть если мне нужно раскрасить ячейку по значению другой ячейки этой строки?
...
Рейтинг: 0 / 0
Повторный вызов DataAdapter.Fill
    #32944946
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А какой топик вы нашли?
И лучше по "раскраске грида" перевести обсуждение туда.

Код: plaintext
 uid  =  S a
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Повторный вызов DataAdapter.Fill
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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