powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / помогите разобраться с Grid + Combo
23 сообщений из 23, страница 1 из 1
помогите разобраться с Grid + Combo
    #32958973
ReinRaus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
помогите, весь день уже парюсь :((
проанализировал все топики по теме на этом форуме, MSDN и прочее, но ниче не получается :(
суть:
есть 2 таблицы
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
  create table WareType (
      WareTypeID int constraint pk_WareType_TypeID primary key
    , WareTypeName varchar(30) not null
  )

  create table Ware (
      WareID int constraint pk_Ware_WareID primary key
    , WareName varchar(200) not null
    , WareTypeID int constraint fk_Ware_WareTypeID references WareType ( WareTypeID )
  )

далее - на форме в гриде выводится результат селекта:
Код: plaintext
1.
2.
3.
SELECT w.*, 
  wt.TypeNameName AS WareTypeName
FROM Ware w INNER JOIN WareType wt ON w.WareTypeID = wt.WareTypeID
и еще есть наформе комбобокс, источник данных для которго служет селект:
Код: plaintext
1.
select * from WareType

далее, при навигации по гриду, в комбобоксе должно меняться значение, в зависимости от того, какой WareTypeName в гриде для этой записи, соответсвенно чтобы такой же становился в комбобоксе. при этом чтобы при раскрытии списка комбобокса были доступны для выбора любые значания из таблицы WareType. При изменении значения в комбобоксе менять значение в гриде не надо (пока).
как это оформить сделать чисто программно и отдельно чисто визуально ( в 2-х вариантах ) ? т.е. интересует как связать DBGRID и COMBOBOX.
...
Рейтинг: 0 / 0
помогите разобраться с Grid + Combo
    #32959116
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как вариант:
ReinRaus
далее, при навигации по гриду, в комбобоксе должно меняться значение, в зависимости от того, какой WareTypeName в гриде для этой записи, соответсвенно чтобы такой же становился в комбобоксе.

Подписаться на PositionChanged CurrencyManager
В обработке PositionChanged по текущему значению находите и выставляете Position у комбобокса.
Если у вас есть код биндинга DataGrid и ComboBox то привидите его, от него можно "плясать" конкретно. Если нет, то соответствующий код придется написать - мне, вам, или кому то еще :-)

ReinRaus
как это оформить сделать чисто программно и отдельно чисто визуально ( в 2-х вариантах ) ? т.е. интересует как связать DBGRID и COMBOBOX.

Визуально - имеете ввиду при помощи wizard ов?

Код: plaintext
 uid  =  S a
...
Рейтинг: 0 / 0
помогите разобраться с Grid + Combo
    #32959138
ReinRaus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sa
ReinRaus
как это оформить сделать чисто программно и отдельно чисто визуально ( в 2-х вариантах ) ? т.е. интересует как связать DBGRID и COMBOBOX.

Визуально - имеете ввиду при помощи wizard ов?

нет, при помощи мышки и окошка Properties
...
Рейтинг: 0 / 0
помогите разобраться с Grid + Combo
    #32959147
кузя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
помогите разобраться с Grid + Combo
    #32959149
ReinRaus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sa
Если у вас есть код биндинга DataGrid и ComboBox то привидите его, от него можно "плясать" конкретно. Если нет, то соответствующий код придется написать - мне, вам, или кому то еще :-)

Код: 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.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace WindowsApplication7
{
	/// <summary>
	/// Summary description for Form1.
	/// </summary>
	public class Form1 : System.Windows.Forms.Form
	{
    private System.Windows.Forms.DataGrid dataGrid1;
    private System.Windows.Forms.ComboBox comboBox1;
    private System.Data.SqlClient.SqlConnection sqlConnection1;
    private System.Data.SqlClient.SqlDataAdapter sqlDataAdapter1;
    private System.Data.SqlClient.SqlCommand sqlSelectCommand1;
    private WindowsApplication7.DataSet1 dataSet11;
    private System.Data.SqlClient.SqlDataAdapter sqlDataAdapter2;
    private System.Data.SqlClient.SqlCommand sqlSelectCommand2;
    private System.Data.SqlClient.SqlCommand sqlInsertCommand1;
    private System.Data.SqlClient.SqlCommand sqlUpdateCommand1;
    private System.Data.SqlClient.SqlCommand sqlDeleteCommand1;
		/// <summary>
		/// Required designer variable.
		/// </summary>
		private System.ComponentModel.Container components = null;

		public Form1()
		{
			//
			// Required for Windows Form Designer support
			//
			InitializeComponent();

			//
			// TODO: Add any constructor code after InitializeComponent call
			//
		}

		/// <summary>
		/// Clean up any resources being used.
		/// </summary>
		protected override void Dispose( bool disposing )
		{
			if( disposing )
			{
				if (components != null) 
				{
					components.Dispose();
				}
			}
			base.Dispose( disposing );
		}

		#region Windows Form Designer generated code
		/// <summary>
		/// Required method for Designer support - do not modify
		/// the contents of this method with the code editor.
		/// </summary>
		private void InitializeComponent()
		{
      this.dataGrid1 = new System.Windows.Forms.DataGrid();
      this.comboBox1 = new System.Windows.Forms.ComboBox();
      this.sqlConnection1 = new System.Data.SqlClient.SqlConnection();
      this.sqlDataAdapter1 = new System.Data.SqlClient.SqlDataAdapter();
      this.sqlSelectCommand1 = new System.Data.SqlClient.SqlCommand();
      this.dataSet11 = new WindowsApplication7.DataSet1();
      this.sqlDataAdapter2 = new System.Data.SqlClient.SqlDataAdapter();
      this.sqlDeleteCommand1 = new System.Data.SqlClient.SqlCommand();
      this.sqlInsertCommand1 = new System.Data.SqlClient.SqlCommand();
      this.sqlSelectCommand2 = new System.Data.SqlClient.SqlCommand();
      this.sqlUpdateCommand1 = new System.Data.SqlClient.SqlCommand();
      ((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).BeginInit();
      ((System.ComponentModel.ISupportInitialize)(this.dataSet11)).BeginInit();
      this.SuspendLayout();
      // 
      // dataGrid1
      // 
      this.dataGrid1.DataMember = "";
      this.dataGrid1.DataSource = this.dataSet11.Ware;
      this.dataGrid1.HeaderForeColor = System.Drawing.SystemColors.ControlText;
      this.dataGrid1.Location = new System.Drawing.Point(48, 24);
      this.dataGrid1.Name = "dataGrid1";
      this.dataGrid1.Size = new System.Drawing.Size(680, 176);
      this.dataGrid1.TabIndex = 0;
      // 
      // comboBox1
      // 
      this.comboBox1.DataSource = this.dataSet11.WareType;
      this.comboBox1.DisplayMember = "TypeName";
      this.comboBox1.Location = new System.Drawing.Point(304, 256);
      this.comboBox1.Name = "comboBox1";
      this.comboBox1.Size = new System.Drawing.Size(121, 24);
      this.comboBox1.TabIndex = 1;
      this.comboBox1.ValueMember = "TypeID";
      // 
      // sqlConnection1
      // 
      this.sqlConnection1.ConnectionString = "workstation id=PAVEL;packet size=4096;user id=sa;integrated security=SSPI;data so" +
        "urce=PAVEL;persist security info=False;initial catalog=GeneralCardBaseNew";
      // 
      // sqlDataAdapter1
      // 
      this.sqlDataAdapter1.SelectCommand = this.sqlSelectCommand1;
      this.sqlDataAdapter1.TableMappings.AddRange(new System.Data.Common.DataTableMapping[] {
                                                                                              new System.Data.Common.DataTableMapping("Table", "Ware", new System.Data.Common.DataColumnMapping[] {
                                                                                                                                                                                                    new System.Data.Common.DataColumnMapping("WareTypeName", "WareTypeName"),
                                                                                                                                                                                                    new System.Data.Common.DataColumnMapping("WareID", "WareID"),
                                                                                                                                                                                                    new System.Data.Common.DataColumnMapping("WareGroup", "WareGroup"),
                                                                                                                                                                                                    new System.Data.Common.DataColumnMapping("WareName", "WareName"),
                                                                                                                                                                                                    new System.Data.Common.DataColumnMapping("WareType", "WareType"),
                                                                                                                                                                                                    new System.Data.Common.DataColumnMapping("WareQuan", "WareQuan"),
                                                                                                                                                                                                    new System.Data.Common.DataColumnMapping("WareSection", "WareSection"),
                                                                                                                                                                                                    new System.Data.Common.DataColumnMapping("WareDiscountPer", "WareDiscountPer"),
                                                                                                                                                                                                    new System.Data.Common.DataColumnMapping("WareDiscountSum", "WareDiscountSum"),
                                                                                                                                                                                                    new System.Data.Common.DataColumnMapping("TypeID", "TypeID")})});
      // 
      // sqlSelectCommand1
      // 
      this.sqlSelectCommand1.CommandText = "SELECT wt.TypeName AS WareTypeName, w.WareID, w.WareGroup, w.WareName, w.WareType" +
        ", w.WareQuan, w.WareSection, w.WareDiscountPer, w.WareDiscountSum, wt.TypeID FRO" +
        "M Ware w INNER JOIN WareType wt ON w.WareType = wt.TypeID";
      this.sqlSelectCommand1.Connection = this.sqlConnection1;
      // 
      // dataSet11
      // 
      this.dataSet11.DataSetName = "DataSet1";
      this.dataSet11.Locale = new System.Globalization.CultureInfo("ru-RU");
      // 
      // sqlDataAdapter2
      // 
      this.sqlDataAdapter2.DeleteCommand = this.sqlDeleteCommand1;
      this.sqlDataAdapter2.InsertCommand = this.sqlInsertCommand1;
      this.sqlDataAdapter2.SelectCommand = this.sqlSelectCommand2;
      this.sqlDataAdapter2.TableMappings.AddRange(new System.Data.Common.DataTableMapping[] {
                                                                                              new System.Data.Common.DataTableMapping("Table", "WareType", new System.Data.Common.DataColumnMapping[] {
                                                                                                                                                                                                        new System.Data.Common.DataColumnMapping("TypeID", "TypeID"),
                                                                                                                                                                                                        new System.Data.Common.DataColumnMapping("TypeName", "TypeName")})});
      this.sqlDataAdapter2.UpdateCommand = this.sqlUpdateCommand1;
      // 
      // sqlDeleteCommand1
      // 
      this.sqlDeleteCommand1.CommandText = "DELETE FROM WareType WHERE (TypeID = @Original_TypeID) AND (TypeName = @Original_" +
        "TypeName)";
      this.sqlDeleteCommand1.Connection = this.sqlConnection1;
      this.sqlDeleteCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_TypeID", System.Data.SqlDbType.Int, 4, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "TypeID", System.Data.DataRowVersion.Original, null));
      this.sqlDeleteCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_TypeName", System.Data.SqlDbType.VarChar, 30, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "TypeName", System.Data.DataRowVersion.Original, null));
      // 
      // sqlInsertCommand1
      // 
      this.sqlInsertCommand1.CommandText = "INSERT INTO WareType(TypeID, TypeName) VALUES (@TypeID, @TypeName); SELECT TypeID" +
        ", TypeName FROM WareType WHERE (TypeID = @TypeID)";
      this.sqlInsertCommand1.Connection = this.sqlConnection1;
      this.sqlInsertCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@TypeID", System.Data.SqlDbType.Int, 4, "TypeID"));
      this.sqlInsertCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@TypeName", System.Data.SqlDbType.VarChar, 30, "TypeName"));
      // 
      // sqlSelectCommand2
      // 
      this.sqlSelectCommand2.CommandText = "SELECT TypeID, TypeName FROM WareType";
      this.sqlSelectCommand2.Connection = this.sqlConnection1;
      // 
      // sqlUpdateCommand1
      // 
      this.sqlUpdateCommand1.CommandText = "UPDATE WareType SET TypeID = @TypeID, TypeName = @TypeName WHERE (TypeID = @Origi" +
        "nal_TypeID) AND (TypeName = @Original_TypeName); SELECT TypeID, TypeName FROM Wa" +
        "reType WHERE (TypeID = @TypeID)";
      this.sqlUpdateCommand1.Connection = this.sqlConnection1;
      this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@TypeID", System.Data.SqlDbType.Int, 4, "TypeID"));
      this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@TypeName", System.Data.SqlDbType.VarChar, 30, "TypeName"));
      this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_TypeID", System.Data.SqlDbType.Int, 4, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "TypeID", System.Data.DataRowVersion.Original, null));
      this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_TypeName", System.Data.SqlDbType.VarChar, 30, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "TypeName", System.Data.DataRowVersion.Original, null));
      // 
      // Form1
      // 
      this.AutoScaleBaseSize = new System.Drawing.Size(6, 15);
      this.ClientSize = new System.Drawing.Size(776, 368);
      this.Controls.Add(this.comboBox1);
      this.Controls.Add(this.dataGrid1);
      this.Name = "Form1";
      this.Text = "Form1";
      this.Load += new System.EventHandler(this.Form1_Load);
      ((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).EndInit();
      ((System.ComponentModel.ISupportInitialize)(this.dataSet11)).EndInit();
      this.ResumeLayout(false);

    }
		#endregion

		/// <summary>
		/// The main entry point for the application.
		/// </summary>
		[STAThread]
		static void Main() 
		{
			Application.Run(new Form1());
		}

    private void Form1_Load(object sender, System.EventArgs e)
    {
      sqlDataAdapter1.Fill(dataSet11);
      sqlDataAdapter2.Fill(dataSet11);
      
    }
	}
}

...
Рейтинг: 0 / 0
помогите разобраться с Grid + Combo
    #32959155
ReinRaus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
кузя2 ReinRaus
посмотри еще в MSDN статью:
Creating a Lookup Table for a Windows Forms ComboBox, ListBox, or CheckedListBox Control

смотрел
но не помогает
т.е. в комбобоксе все нормально, инфа вся как надо из справочника отображается, но связи с гридом не наблюдается
...
Рейтинг: 0 / 0
помогите разобраться с Grid + Combo
    #32959162
кузя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у комбо и грида должен быть один и тот же DataSource
...
Рейтинг: 0 / 0
помогите разобраться с Grid + Combo
    #32959165
ReinRaus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SaКак вариант:
Подписаться на PositionChanged CurrencyManager



это что такое, событие грида или что?
...
Рейтинг: 0 / 0
помогите разобраться с Grid + Combo
    #32959170
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ReinRaus
нет, при помощи мышки и окошка Properties

при помощи стандартных компонентов нет

кузя
посмотри еще в MSDN статью:
Creating a Lookup Table for a Windows Forms ComboBox, ListBox, or CheckedListBox Control

+
при помощи DataRelation можно обойтись и без INNER JOIN в запросе = как вариант это приемлемый вариант, но полюбому придется использовать DataSet и DataRelation .

Код: plaintext
 uid  =  S a
...
Рейтинг: 0 / 0
помогите разобраться с Grid + Combo
    #32959175
ReinRaus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
кузяу комбо и грида должен быть один и тот же DataSource

и какой же?
тот что берет данные для ware или wareType?

если 1-й вариант, то не будет всех возможных значений wareType в комбобоксе. если 2-й, то в гриде будет не то что нам надо.
...
Рейтинг: 0 / 0
помогите разобраться с Grid + Combo
    #32959185
ReinRaus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sa
при помощи DataRelation можно обойтись и без INNER JOIN в запросе

меня не пугет inner join
автор
но полюбому придется использовать DataSet и DataRelation


и какиом образом их нужно использовать?
...
Рейтинг: 0 / 0
помогите разобраться с Grid + Combo
    #32959188
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ReinRaus
смотрел
но не помогает
т.е. в комбобоксе все нормально, инфа вся как надо из справочника отображается, но связи с гридом не наблюдается

DataRelation не забыли?

Сейчас нет времени :-( , сегодня поздно вечером (GMT + 5:00) выложу два варианта с использованием DataRelation и без.

Код: plaintext
 uid  =  S a
...
Рейтинг: 0 / 0
помогите разобраться с Grid + Combo
    #32959193
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, если это еще будет актуально к тому времени :-)

Код: plaintext
 uid  =  S a
...
Рейтинг: 0 / 0
помогите разобраться с Grid + Combo
    #32959198
кузя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 ReinRaus
DataSource, в твоем случае, д.б. DataSet11
...
Рейтинг: 0 / 0
помогите разобраться с Grid + Combo
    #32959207
ReinRaus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
кузя2 ReinRaus
DataSource, в твоем случае, д.б. DataSet11
да, я в курсе..
...
Рейтинг: 0 / 0
помогите разобраться с Grid + Combo
    #32959212
ReinRaus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sa
Сейчас нет времени :-( , сегодня поздно вечером (GMT + 5:00) выложу два варианта с использованием DataRelation и без.


было бы круто..
...
Рейтинг: 0 / 0
помогите разобраться с Grid + Combo
    #32959228
ReinRaus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sa
DataRelation не забыли?


а зечем он нужен вообще?
разве этого не достаточно:

create table Ware (
WareID int constraint pk_Ware_WareID primary key
, WareName varchar(200) not null
, WareTypeID int constraint fk_Ware_WareTypeID references WareType ( WareTypeID )
)
...
Рейтинг: 0 / 0
помогите разобраться с Grid + Combo
    #32959270
кузя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
связка в твоем случае д.б. примерно такой:
Код: plaintext
1.
2.
3.
4.
5.
this.dataGrid1.SetDataBinding(ds, "Ware");

this.comboBox1.DataSource=ds;
this.comboBox1.DisplayMember="WareType.WareTypeName";
this.comboBox1.ValueMember  ="WareType.WareTypeName";
this.comboBox1.DataBindings.Add("SelectedValue", ds, "Ware.WareTypeName");
...
Рейтинг: 0 / 0
помогите разобраться с Grid + Combo
    #32959938
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ReinRaus
Sa
DataRelation не забыли?

а зечем он нужен вообще?
разве этого не достаточно:
create table Ware (
WareID int constraint pk_Ware_WareID primary key
, WareName varchar(200) not null
, WareTypeID int constraint fk_Ware_WareTypeID references WareType ( WareTypeID )

Наличие FK в БД не обозначает, что DataSet будет автоматически иметь этот constraint. Для подобных случаев DataRelation и удобно использовать. Хотя основное предназначение DataRelation , в коде который я выкладываю, это использование его для создания вычисляемого столбца, см. метод CreateExpressionBasedColumn()

Второй представленный вариант - без использования DataSet, с INNER JOIN и пока полнее решает изначально поставленную задачу.

P.S. чтобы пошел пример поменяйте CONNECTIONSTRING
P.S.S. Да это не единственные варианты, ничего вам не мешает сделать binding к SelectedValue во втором варианте, или отказаться от ExpressionBasedColumn в пользу INNER JOIN в первом, использовать типизированный DataSet and etc....

Код: plaintext
 uid  =  S a
...
Рейтинг: 0 / 0
помогите разобраться с Grid + Combo
    #32959944
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Form1.cs

Код: plaintext
 uid  =  S a
...
Рейтинг: 0 / 0
помогите разобраться с Grid + Combo
    #32960487
ReinRaus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sa - спасибо! заработало! буду разбираться..
только я немного в шоке вот от этого:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
...............
private DataTable CreateWareTypeTable()
    {
      DataTable dt = new DataTable("WareType");
      DataColumn pk;
      pk = dt.Columns.Add("WareTypeID", typeof(System.Int32));
      pk.AllowDBNull = false;
      pk.Unique = true;
      dt.Columns.Add("WareTypeName", typeof(System.String)).AllowDBNull = false;
      dt.PrimaryKey = new DataColumn[] {pk};
      return dt;
    }
...............

т.е. когда делаем клиент-серверное приложение в C#, надо таблицы вместе с констрэйнтами создавать в 2-х местах : на сервере и в клиенете?
а индексы, процедуры, триггеры- тоже надо будет дублировать в клиентской части? :)
...
Рейтинг: 0 / 0
помогите разобраться с Grid + Combo
    #32960605
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ReinRaus
т.е. когда делаем клиент-серверное приложение в C#, надо таблицы вместе с констрэйнтами создавать в 2-х местах : на сервере и в клиенете?
а индексы, процедуры, триггеры- тоже надо будет дублировать в клиентской части? :)

если очень хочется :-)

Различные проверки, через Constraint, DataRelation в DataSet сообщат вам о нарушении целостности уже заранее, а не во время попытки сброса неверных данных в БД, особенно это полезно когда соединение с БД дорого стоит.
Также различные каскадных изменения в клиентской части тоже гарантируют целостность мини-локальной-копии-вашей-базы данных под названием DataSet.
НО!!!!! в любом подходе есть плюсы и минусы, разработчику приходится балансировать, а главное выполнять поставленную задачу. Какая задача у вас я не знаю.
Чем больше классов, тем больше памяти требуется приложению, в вашем случае, мне пока по душе Variant 2

Как правило я предпочитаю либо typed dataset , либо вручную создаю схему, например как здесь,
как минимум не тратится время на считывание метаданных!!!!!! (это большой плюс), а также о том, что схема изменилась я узнаю уже на Fill , см MissingSchemaAction .

P.S. Кстати полезно посмотреть что же представляет из себя типизированный DataSet , для этого в SolutionExplorer в самом верху нажмите кнопку "Show All Files", теперь будет виден скрытый по умолчанию TypedDataSetName.cs файл , где TypedDataSetName - имя вашего типизированного DataSet.

Код: plaintext
 uid  =  S a
...
Рейтинг: 0 / 0
помогите разобраться с Grid + Combo
    #32960767
ReinRaus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ясно, спасибо снова :)
земляки должны помогать друг другу ;)
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / помогите разобраться с Grid + Combo
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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