2016-10-30 2 views
2

данных в стандартном DataGridView выглядит слишком пустымWinForms. Как найти TableAdapter и заполнить DataTable в Design-Time

enter image description here

и неясно, как данные выглядят в подгонять, заполненные сетки

Я собираюсь расширить сетку, чтобы выглядеть более сложным, но результат будет виден только во время выполнения, когда у него есть данные.

Так что я хочу заполнить DataTable во время разработки, чтобы увидеть, как результат выглядит в Grid. Поэтому мне нужно код

выполнение проектно

this.MyDataTableTableAdapter.Fill (this.dBTestDataSet.MyDataTable)

я могу получить this.dBTestDataSet.MyDataTable от DataSource, когда DataSource присваивается BindingSource, используя следующий код:

if ((DataSource is BindingSource) && String.IsNullOrEmpty(DataMember)) 
    { 
    BindingSource bindingSource = (DataSource as BindingSource); 
    if ((bindingSource.DataSource is DataSet) && (bindingSource.DataMember is String)) 
    { 
     DataSet dataSet = (bindingSource.DataSource as DataSet); 
     DataTable dataTable = dataSet.Tables[bindingSource.DataMember]; 
     return dataTable; 
    } 
    } 

теперь у меня есть MyDataTable

, но как я могу получить MyDataTableTableAdapter?

Я не вижу никакой связи между MyDataTable и MyDataTableTableAdapter в коде porject

Хотя среда разработки правильно показывает DataAdapter при каждом DataTable.

enter image description here

enter image description here

+0

Опишите, пожалуйста, подробную информацию о вашей цели. –

+0

Как я понял, есть доступ к TableProvider во время разработки или другой способ отображения реальных данных из таблицы данных в сетках в ** design-time **. IMHO, это полезная функция, и в Embarcadero RAD Studio (Delphi) происходит нечто подобное: мы можем просматривать данные из DataSet в любых прикрепленных (привязанных) элементах управления данными. – BlackWitcher

ответ

1

Я считаю, что это не очень хорошая идея, чтобы загрузить фактические данные для дизайнера. Вы можете заполнить DataGridView, используя некоторые поддельные данные, так же, как это делает дизайнер веб-форм для управления ASP.NET GridView.

Q: Как я могу получить MyDataTableTableAdapter? Я не вижу никакой связи между MyDataTable и MyDataTableTableAdapter в коде приложения.

Каждый набор данных имеет XSD файл, который содержит определение набора данных схемы, а также содержит некоторые аннотации, которые будут использоваться для создания TableAdapter классов, например, он содержит некоторые узлы, как:

<TableAdapter BaseClass="System.ComponentModel.Component" 
DataAccessorModifier="AutoLayout, AnsiClass, Class, Public" 
DataAccessorName="CategoryTableAdapter" 
GeneratorDataComponentClassName="CategoryTableAdapter" 
Name="Category" 
UserDataComponentName="CategoryTableAdapter"> 

Вы может проанализировать файл и извлечь связанный с ним TableAdapter для DataTable. Как вы можете видеть выше, xml - это точка, которую TableAdapter и DataTable связаны друг с другом.

Вы можете получить файл xsd с помощью методов Visual Studio API. Также как более простой способ обхода, вы можете установить его BuildAction на Embedded Resource и получить его из скомпилированной сборки.

Примечание

Другой вариант, который может удовлетворить ваше требование положить ваш DataGridView контроль в UserControl и нагрузки данных в конструкторе UserControl, таким образом, когда вы положили экземпляр вашего UserControl на форме, так как дизайнер выполняет конструктор вашего UserControl, тогда DataGridView будет заполнен данными.

Тогда, если вы хотите разоблачить Columns property of DataGridView, вы можете использовать this solution.

+0

Вы можете увидеть, как я заполняю таблицу данных во время разработки с использованием реальных данных в [этом примере] (https://dotnetfiddle.net/sHTJNZ). Я предпочитаю не включать его в ответ, потому что это просто для удовольствия (и цели обучения), и я написал его просто для вас, чтобы вы имели представление о том, как разбирать файл XSD. В примере, который я предположил для файла 'XDS', вы установили' Build Action' в 'Embedded Resource'. Но в целом я не рекомендую использовать его в реальной среде таким образом. Второй вариант, который я поделил, лучше. –

+0

Дайте мне знать, если у вас есть вопросы по поводу этого ответа или [связанного сообщения] (http://stackoverflow.com/questions/36787383/expose-columns-property-of-a-datagridview-in-usercontrol-and-make -и-editable-vi), или если вы найдете их полезными :) –

+0

Кажется, ваши новые вопросы связаны с требованием, которое у вас было здесь. Не пропустите эту запись: [Expose Columns свойство DataGridView в UserControl и сделайте его редактируемым через Designer] (http://stackoverflow.com/questions/36787383/expose-columns-property-of-a-datagridview-in- UserControl-и-делать-он-редактируемые-VI) –