Я искал на часы для чего-то очень простого: свяжите WPF datagrid с таблицей данных для наблюдения столбцов во время проектирования. Я не могу заставить ни один из примеров работать на меня.
Вот код C# для заполнения таблицы данных InfoWork в информации о наборе данных:
info = new Info();
InfoTableAdapters.InfoWorkTableAdapter adapter = new InfoTableAdapters.InfoWorkTableAdapter();
adapter.Fill(info.InfoWork);
Проблема состоит, неважно в том, как я объявляю 'информацию', или ‘infoWork’ Visual Studio/XAML не может найти его. Я попробовал:
<Window.Resources>
<ObjectDataProvider x:Key="infoWork" ObjectType="{x:Type local:info}" />
</Window.Resources>
Я также попробовал этот пример от wpf.codeplex, но XAML даже не нравится “локальное”: ключевое слово!
<Window.Resources>
<local:info x:Key="infoWork"/>
</Window.Resources>
Здесь существует действительно два основных вопроса: 1) Как я объявляю таблицу InfoWork в C# так, чтобы XAML видела его? Я пытался объявить это Общественность в классе окна, что XAML существует в без успеха. 2) Как я объявляю ресурс окон в XAML, specifcally таблица данных в наборе данных?
Из любопытства, там причина, что ItemsSource просто не обнаруживается как свойство, которое можно быть установлен в окне дизайна свойств?
У меня работает следующее использование Microsoft DataGrid:
В XAML я включаю DataGrid:
<WpfToolkit:DataGrid
Grid.Row="4" Grid.Column="0"
ItemsSource="{Binding Path=GridData, Mode=OneWay}" >
</WpfToolkit:DataGrid>
В моей модели представления я предоставляю DataView:
public DataView GridData
{
get
{
DataSet ds = new DataSet("MyDataSet");
using (SqlConnection conn = new SqlConnection(ConnectionString))
{
SqlCommand cmd = conn.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "SELECT * FROM HumanResources.Employee";
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(ds);
}
return ds.Tables[0].DefaultView;
}
}