Повторный вызов DataAdapter.Fill

mucks
Дата: 25.01.2005 15:01:04
Имеется пустой dataSet.
Заливаю в него таблицу SqlAdapter.Fill(dataSet, "TableName")
Связываю таблицу с гридом, все прекрасно отображается.
Повторно вызываю SqlAdapter.Fill(dataSet, "TableName") который возвращает уже другие данные.
Грид отображает старые.
Что я не так делаю ?
Переприсвоение гриду свойств DataSource и DataMember, вызов SetDataBinding, предварительное удаление таблиц из датасета не помогают.
При просмотре в отладчике dataSet после второго вызова Fill содержит одну таблицу TableName, в которой содержатся верные данные. Грид также ссылается на верный датасет и прописан DataMember="TableName"
gerss
Дата: 25.01.2005 17:17:26
Попробуй
datagrid1.DataBind()
Сергей
mucks
Дата: 25.01.2005 17:57:53
Забыл уточнить. Я работаю с Windows.Forms
SetDataBinding в формах - это аналог DataBind в web, как я понимаю.
Это не помогло, как я говорил...
gerss
Дата: 25.01.2005 18:13:33
mucks
Забыл уточнить. Я работаю с Windows.Forms
SetDataBinding в формах - это аналог DataBind в web, как я понимаю.
Это не помогло, как я говорил...


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

Может, стоит попробовать
   datagrid1.ResetDatabindings();
   datagrid1.SetDataBindings(...);
   datagrid1.Update();

Это только предположения, сам с такой ситуацией не сталкивался.
mucks
Дата: 25.01.2005 18:40:42
Нет, не помогло.
Кстати, попутный вопрос, который должен помочь проблеме.
Если выполнить dataSet.Tables.Clear() , то грид продолжает отображать данные. Вопрос: откуда он их берет ?
Sa
Дата: 25.01.2005 21:39:52
Привидите код, особенно интересует как осуществляется биндинг

uid = Sa
mucks
Дата: 26.01.2005 10:59:15
Полный код довольно длинный. Вот часть, где таблица заполняется. Эта функция вызывается последовательно два раза с разным параметром. После первого раза работает, после второго грид гонит.

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 добавлены в поисках истины. Первый вызов прекрасно работает без них.
mucks
Дата: 26.01.2005 11:05:08
Заодно код CreateColumns
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);
	}

}
Sa
Дата: 26.01.2005 12:16:06
Попробуйте вместо:
dataGrid.SetDataBinding(dataSet, "Specification");
это:
dataGrid.DataSource = dataSet.Tables["Specification"];
mucks
Дата: 26.01.2005 14:41:22
Спасибо, в этом случае работает.
Но все таки интересно, откуда грид берет данные, если таблицу удалили. Значит dataSet оставляет на нее ссылку где то и потом когда грид хочет получить dataMember = "Specification" возвращает именно ее. Больше мне ничего не приходит в голову. Может есть какой нибудь хитрый метод, который чистит dataSet от подобных вещей, а я о нем не знаю ?