List:Commits« Previous MessageNext Message »
From:rburnett Date:December 15 2008 9:55pm
Subject:Connector/NET commit: r1488 - in trunk/MySql.VisualStudio: DbObjects Editors Properties
View as plain text  
Modified:
   trunk/MySql.VisualStudio/DbObjects/ForeignKey.cs
   trunk/MySql.VisualStudio/DbObjects/Table.cs
   trunk/MySql.VisualStudio/Editors/ForeignKeyDialog.Designer.cs
   trunk/MySql.VisualStudio/Editors/ForeignKeyDialog.cs
   trunk/MySql.VisualStudio/Editors/ForeignKeyDialog.resx
   trunk/MySql.VisualStudio/Editors/IndexColumnEditorDialog.cs
   trunk/MySql.VisualStudio/Properties/Resources.Designer.cs
   trunk/MySql.VisualStudio/Properties/Resources.resx
Log:
got foreign key editor dialog working mostly the way I want it to.  Both it and the index column editor dialog close for no apparent reason.  I still have to figure out what is wrong there.

Modified: trunk/MySql.VisualStudio/DbObjects/ForeignKey.cs
===================================================================
--- trunk/MySql.VisualStudio/DbObjects/ForeignKey.cs	2008-12-15 18:47:08 UTC (rev 1487)
+++ trunk/MySql.VisualStudio/DbObjects/ForeignKey.cs	2008-12-15 21:55:25 UTC (rev 1488)
@@ -10,6 +10,7 @@
         {
             Table = t;
             SetName(String.Format("FK_{0}_{0}", t.Name), true);
+            Columns = new List<FKColumnPair>();
         }
 
         private Table Table { get; set; }
@@ -18,7 +19,7 @@
         public MatchOption Match { get; set; }
         public ReferenceOption UpdateAction { get; set; }
         public ReferenceOption DeleteAction { get; set; }
-        List<FKColumnPair> Columns { get; set; }
+        public List<FKColumnPair> Columns { get; set; }
 
         public override string ToString()
         {
@@ -60,9 +61,9 @@
         NoAction, Cascade, Restrict, SetNull
     }
 
-    struct FKColumnPair
+    class FKColumnPair
     {
-        public string parentTable;
-        public string childTable;
+        public string ParentTable { get; set; }
+        public string ChildTable { get; set; }
     }
 }

Modified: trunk/MySql.VisualStudio/DbObjects/Table.cs
===================================================================
--- trunk/MySql.VisualStudio/DbObjects/Table.cs	2008-12-15 18:47:08 UTC (rev 1487)
+++ trunk/MySql.VisualStudio/DbObjects/Table.cs	2008-12-15 21:55:25 UTC (rev 1488)
@@ -215,13 +215,6 @@
             }
         }
 
-        private bool KeyExists(string keyName)
-        {
-            foreach (Index i in indexes)
-                if (String.Compare(i.Name, keyName, true) == 0) return true;
-            return false;
-        }
-
         public Index CreateIndexWithUniqueName(bool primary)
         {
             Index newIndex = new Index(this);
@@ -236,6 +229,43 @@
             return newIndex;
         }
 
+        public List<string> GetColumnNames()
+        {
+            string sql = @"SELECT column_name FROM INFORMATION_SCHEMA.COLUMNS WHERE 
+                TABLE_SCHEMA='{0}' AND TABLE_NAME='{1}'";
+            DataTable dt = owningNode.GetDataTable(String.Format(sql, owningNode.Database, Name));
+            List<string> cols =new List<string>();
+            foreach (DataRow row in dt.Rows)
+                cols.Add(row[0].ToString());
+            return cols;
+        }
+
+        public string GetSql(Table fromTable)
+        {
+
+            StringBuilder sql = new StringBuilder();
+            if (isNew)
+                sql.AppendFormat("CREATE TABLE `{0}` (", Name);
+            else
+                sql.AppendFormat("ALTER TABLE `{0}` ", fromTable.Name);
+
+            //            foreach (Column c in Columns)
+            //              sql.Append(c.GetSql(), IsNew);
+
+            if (isNew) sql.Append(") ");
+            sql.Append(GetTableOptionSql(fromTable));
+            return sql.ToString();
+        }
+
+        #region Private methods
+
+        private bool KeyExists(string keyName)
+        {
+            foreach (Index i in indexes)
+                if (String.Compare(i.Name, keyName, true) == 0) return true;
+            return false;
+        }
+
         private void ParseTableData(DataRow tableRow)
         {
 /*            dt.Columns.Add("TABLE_TYPE", typeof(string));
@@ -294,23 +324,6 @@
             }
         }
 
-        public string GetSql(Table fromTable)
-        {
-
-            StringBuilder sql = new StringBuilder();
-            if (isNew)
-                sql.AppendFormat("CREATE TABLE `{0}` (", Name);
-            else
-                sql.AppendFormat("ALTER TABLE `{0}` ", fromTable.Name);
-
-//            foreach (Column c in Columns)
-  //              sql.Append(c.GetSql(), IsNew);
-
-            if (isNew) sql.Append(") ");
-            sql.Append(GetTableOptionSql(fromTable));
-            return sql.ToString();
-        }
-
         private string GetTableOptionSql(Table fromTable)
         {
             StringBuilder sql = new StringBuilder();
@@ -335,6 +348,8 @@
             return sql.ToString();
         }
 
+        #endregion
+
         #region ICustomTypeDescriptor Members
 
         public TypeConverter GetConverter()

Modified: trunk/MySql.VisualStudio/Editors/ForeignKeyDialog.Designer.cs
===================================================================
--- trunk/MySql.VisualStudio/Editors/ForeignKeyDialog.Designer.cs	2008-12-15 18:47:08 UTC (rev 1487)
+++ trunk/MySql.VisualStudio/Editors/ForeignKeyDialog.Designer.cs	2008-12-15 21:55:25 UTC (rev 1488)
@@ -42,6 +42,7 @@
             this.columnGrid = new System.Windows.Forms.DataGridView();
             this.colGridColumn = new System.Windows.Forms.DataGridViewComboBoxColumn();
             this.fkGridColumn = new System.Windows.Forms.DataGridViewComboBoxColumn();
+            this.fkColumnsBindingSource = new System.Windows.Forms.BindingSource(this.components);
             this.closeButton = new System.Windows.Forms.Button();
             this.label5 = new System.Windows.Forms.Label();
             this.fkName = new System.Windows.Forms.TextBox();
@@ -56,6 +57,7 @@
             this.refTable = new MySql.Data.VisualStudio.Editors.MyComboBox();
             ((System.ComponentModel.ISupportInitialize)(this.foreignKeyBindingSource)).BeginInit();
             ((System.ComponentModel.ISupportInitialize)(this.columnGrid)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.fkColumnsBindingSource)).BeginInit();
             this.SuspendLayout();
             // 
             // fkList
@@ -66,11 +68,11 @@
             this.fkList.Name = "fkList";
             this.fkList.Size = new System.Drawing.Size(181, 304);
             this.fkList.TabIndex = 0;
-            this.fkList.SelectedIndexChanged += new System.EventHandler(this.fkList_SelectedIndexChanged);
             // 
             // foreignKeyBindingSource
             // 
             this.foreignKeyBindingSource.AllowNew = false;
+            this.foreignKeyBindingSource.CurrentChanged += new System.EventHandler(this.foreignKeyBindingSource_CurrentChanged);
             // 
             // label1
             // 
@@ -124,6 +126,7 @@
             // columnGrid
             // 
             this.columnGrid.AllowUserToResizeRows = false;
+            this.columnGrid.AutoGenerateColumns = false;
             this.columnGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill;
             this.columnGrid.BackgroundColor = System.Drawing.SystemColors.Window;
             this.columnGrid.BorderStyle = System.Windows.Forms.BorderStyle.None;
@@ -132,7 +135,7 @@
             this.columnGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
             this.colGridColumn,
             this.fkGridColumn});
-            this.columnGrid.Enabled = false;
+            this.columnGrid.DataSource = this.fkColumnsBindingSource;
             this.columnGrid.GridColor = System.Drawing.SystemColors.ControlLight;
             this.columnGrid.Location = new System.Drawing.Point(218, 163);
             this.columnGrid.MultiSelect = false;
@@ -142,9 +145,13 @@
             this.columnGrid.ShowEditingIcon = false;
             this.columnGrid.Size = new System.Drawing.Size(425, 177);
             this.columnGrid.TabIndex = 10;
+            this.columnGrid.RowValidating += new System.Windows.Forms.DataGridViewCellCancelEventHandler(this.columnGrid_RowValidating);
+            this.columnGrid.CellValidating += new System.Windows.Forms.DataGridViewCellValidatingEventHandler(this.columnGrid_CellValidating);
+            this.columnGrid.EditingControlShowing += new System.Windows.Forms.DataGridViewEditingControlShowingEventHandler(this.columnGrid_EditingControlShowing);
             // 
             // colGridColumn
             // 
+            this.colGridColumn.DataPropertyName = "parentTable";
             this.colGridColumn.DisplayStyle = System.Windows.Forms.DataGridViewComboBoxDisplayStyle.Nothing;
             this.colGridColumn.DisplayStyleForCurrentCellOnly = true;
             this.colGridColumn.HeaderText = "Column";
@@ -152,11 +159,17 @@
             // 
             // fkGridColumn
             // 
+            this.fkGridColumn.DataPropertyName = "childTable";
             this.fkGridColumn.DisplayStyle = System.Windows.Forms.DataGridViewComboBoxDisplayStyle.ComboBox;
             this.fkGridColumn.DisplayStyleForCurrentCellOnly = true;
             this.fkGridColumn.HeaderText = "Foreign Column";
             this.fkGridColumn.Name = "fkGridColumn";
             // 
+            // fkColumnsBindingSource
+            // 
+            this.fkColumnsBindingSource.AllowNew = true;
+            this.fkColumnsBindingSource.DataSource = typeof(MySql.Data.VisualStudio.DbObjects.FKColumnPair);
+            // 
             // closeButton
             // 
             this.closeButton.Location = new System.Drawing.Point(556, 347);
@@ -322,6 +335,7 @@
             this.Text = "Foreign Key Relationships";
             ((System.ComponentModel.ISupportInitialize)(this.foreignKeyBindingSource)).EndInit();
             ((System.ComponentModel.ISupportInitialize)(this.columnGrid)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.fkColumnsBindingSource)).EndInit();
             this.ResumeLayout(false);
             this.PerformLayout();
 
@@ -348,8 +362,9 @@
         private System.Windows.Forms.Label label6;
         private MyComboBox matchType;
         private System.Windows.Forms.Label label7;
-        private System.Windows.Forms.DataGridViewComboBoxColumn colGridColumn;
-        private System.Windows.Forms.DataGridViewComboBoxColumn fkGridColumn;
         private System.Windows.Forms.BindingSource foreignKeyBindingSource;
+        private BindingSource fkColumnsBindingSource;
+        private DataGridViewComboBoxColumn colGridColumn;
+        private DataGridViewComboBoxColumn fkGridColumn;
     }
 }
\ No newline at end of file

Modified: trunk/MySql.VisualStudio/Editors/ForeignKeyDialog.cs
===================================================================
--- trunk/MySql.VisualStudio/Editors/ForeignKeyDialog.cs	2008-12-15 18:47:08 UTC (rev 1487)
+++ trunk/MySql.VisualStudio/Editors/ForeignKeyDialog.cs	2008-12-15 21:55:25 UTC (rev 1488)
@@ -7,12 +7,16 @@
 using System.Windows.Forms;
 using MySql.Data.VisualStudio.DbObjects;
 using System.Collections;
+using MySql.Data.VisualStudio.Properties;
 
 namespace MySql.Data.VisualStudio.Editors
 {
     partial class ForeignKeyDialog : Form
     {
         TableNode tableNode;
+        List<string> columnNames = new List<string>();
+        List<string> fkColumnNames = new List<string>();
+        const string None = "<None>";
 
         public ForeignKeyDialog(TableNode node)
         {
@@ -31,6 +35,13 @@
             refTable.DataSource = tables;
 
             colGridColumn.HeaderText = tableNode.Table.Name;
+            colGridColumn.Items.Add(None);
+            foreach (Column c in tableNode.Table.Columns)
+            {
+                if (c.ColumnName == null) continue;
+                columnNames.Add(c.ColumnName);
+                colGridColumn.Items.Add(c.ColumnName);
+            }
 
             foreignKeyBindingSource.DataSource = tableNode.Table.ForeignKeys;
             fkList.DataSource = foreignKeyBindingSource;
@@ -41,66 +52,47 @@
             Close();
         }
 
-        private void fkList_SelectedIndexChanged(object sender, EventArgs e)
-        {
-            //foreignKeyBindingSource.Position = fkList.SelectedIndex;
-/*            bool good = fkList.SelectedIndex != -1;
-            deleteButton.Enabled = good;
-            if (!good) return;
-
-            ForeignKey key = tableNode.Table.ForeignKeys[fkList.SelectedIndex];
-            fkName.Text = key.Name;
-            updateAction.SelectedValue = key.UpdateAction;
-            deleteAction.SelectedValue = key.DeleteAction;
-            refTable.Items.Clear();
-            foreach (string table in tables)
-                if (String.Compare(table, tableNode.Table.Name, true) != 0)
-                    refTable.Items.Add(table);
-            refTable.SelectedValue = key.ReferencedTable;*/
-        }
-
         private void addButton_Click(object sender, EventArgs e)
         {
             ForeignKey key = new ForeignKey(tableNode.Table);
+            if (refTable.SelectedValue != null)
+                key.SetName(String.Format("FK_{0}_{1}", tableNode.Table.Name,
+                    refTable.SelectedValue), true);
             foreignKeyBindingSource.Add(key);
         }
 
-        private void ClearControls()
-        {
-            fkName.Text = String.Empty;
-            refTable.SelectedIndex = -1;
-            updateAction.SelectedIndex = -1;
-            deleteAction.SelectedIndex = -1;
-            matchType.SelectedIndex = -1;
-            columnGrid.Rows.Clear();
-            fkGridColumn.HeaderText = String.Empty;
-        }
-
         private void deleteButton_Click(object sender, EventArgs e)
         {
-            tableNode.Table.ForeignKeys.RemoveAt(fkList.SelectedIndex);
-            int index = fkList.SelectedIndex;
-            fkList.Items.RemoveAt(index);
-            index--;
-            if (index == -1 && fkList.Items.Count > 0)
-                fkList.SelectedIndex = 0;
-            else if (index > -1)
-                fkList.SelectedIndex = index;
-
-            if (fkList.SelectedIndex == -1)
-                ClearControls();
+            foreignKeyBindingSource.RemoveCurrent();
         }
 
         private void refTable_SelectedIndexChanged(object sender, EventArgs e)
         {
             string refTableName = refTable.Items[refTable.SelectedIndex].ToString();
             fkGridColumn.HeaderText = refTableName;
+
+            //reset the items list for the fk column
+            string sql = @"SELECT column_name FROM INFORMATION_SCHEMA.COLUMNS WHERE 
+                TABLE_SCHEMA='{0}' AND TABLE_NAME='{1}'";
+            DataTable dt = tableNode.GetDataTable(String.Format(sql, tableNode.Database, refTableName));
+            fkColumnNames.Clear();
+            foreach (DataRow row in dt.Rows)
+                fkColumnNames.Add(row[0].ToString());
+
+            fkGridColumn.Items.Clear();
+            fkGridColumn.Items.Add(None);
+            foreach (string col in fkColumnNames)
+                fkGridColumn.Items.Add(col);
+
             if (foreignKeyBindingSource.Current == null) return;
 
+            // update the key name if it is not already finalized
             ForeignKey key = foreignKeyBindingSource.Current as ForeignKey;
-            if (key.NameSet) return;
-            string name = String.Format("FK_{0}_{1}", tableNode.Table.Name, refTableName);
-            key.SetName(name, true);
+            if (!key.NameSet)
+            {
+                string name = String.Format("FK_{0}_{1}", tableNode.Table.Name, refTableName);
+                key.SetName(name, true);
+            }
         }
 
         private void fkName_KeyPress(object sender, KeyPressEventArgs e)
@@ -108,5 +100,109 @@
             ForeignKey key = foreignKeyBindingSource.Current as ForeignKey;
             key.NameSet = true;
         }
+
+        private void columnGrid_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
+        {
+            Type t = e.Control.GetType();
+            if (t != typeof(DataGridViewComboBoxEditingControl)) return;
+
+            DataGridViewComboBoxEditingControl ec = e.Control as DataGridViewComboBoxEditingControl;
+            ec.DrawMode = DrawMode.OwnerDrawFixed;
+            ec.DrawItem += new DrawItemEventHandler(dropdown_DrawItem);
+
+            // now update the items that should be seen in this control
+            ec.Items.Clear();
+            ec.Items.Add(None);
+            int index = columnGrid.CurrentCell.ColumnIndex;
+            List<string> cols = index == 0 ? columnNames : fkColumnNames;
+            ForeignKey key = foreignKeyBindingSource.Current as ForeignKey;
+
+            foreach (string s in cols)
+            {
+                bool alreadyUsed = false;
+                if (s != (string)columnGrid.CurrentCell.Value)
+                    foreach (FKColumnPair pair in key.Columns)
+                        if ((index == 0 && pair.ParentTable == s) ||
+                            (index == 1 && pair.ChildTable == s))
+                        {
+                            alreadyUsed = true;
+                            break;
+                        }
+                if (!alreadyUsed)
+                    ec.Items.Add(s);
+            }
+            int selIndex = ec.FindStringExact(columnGrid.CurrentCell.Value as string);
+            if (selIndex > 0)
+                ec.SelectedIndex = selIndex;
+        }
+
+        void dropdown_DrawItem(object sender, DrawItemEventArgs e)
+        {
+            MyComboBox.DrawComboBox(sender as ComboBox, e);
+        }
+
+        private void foreignKeyBindingSource_CurrentChanged(object sender, EventArgs e)
+        {
+            if (foreignKeyBindingSource.Current == null)
+            {
+                columnGrid.Rows.Clear();
+                return;
+            }
+            ForeignKey key = foreignKeyBindingSource.Current as ForeignKey;
+            fkColumnsBindingSource.DataSource = key.Columns;
+        }
+
+        private void columnGrid_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
+        {
+            int index = e.ColumnIndex;
+            DataGridViewComboBoxCell cell =
+                (DataGridViewComboBoxCell)columnGrid.Rows[e.RowIndex].Cells[e.ColumnIndex];
+
+            FKColumnPair pair = fkColumnsBindingSource.Current as FKColumnPair;
+            string value = e.FormattedValue as string;
+
+            if (value == None)
+            {
+                cell.Value = null;
+                if (index == 0)
+                    pair.ParentTable = null;
+                else
+                    pair.ChildTable = null;
+            }
+            else
+                cell.Value = e.FormattedValue as string;
+        }
+
+        private void columnGrid_RowValidating(object sender, DataGridViewCellCancelEventArgs e)
+        {
+            int index = e.RowIndex;
+
+            DataGridViewCell parentCell = columnGrid.Rows[e.RowIndex].Cells[0];
+            DataGridViewCell childCell = columnGrid.Rows[e.RowIndex].Cells[1];
+            string parent = parentCell.Value as string;
+            string child = childCell.Value as string;
+
+            bool bad = false;
+            parentCell.ErrorText = childCell.ErrorText = null;
+
+            if ((String.IsNullOrEmpty(parent) || parent == None) &&
+                (!String.IsNullOrEmpty(child) && child != None))
+            {
+                parentCell.ErrorText = Resources.FKNeedColumn;
+                bad = true;
+            }
+            else if ((String.IsNullOrEmpty(child) || child == None) &&
+                (!String.IsNullOrEmpty(parent) && parent != None))
+            {
+                childCell.ErrorText = Resources.FKNeedColumn;
+                bad = true;
+            }
+            if (bad)
+            {
+                MessageBox.Show(Resources.FKColumnsNotMatched, null, MessageBoxButtons.OK, MessageBoxIcon.Information);
+                e.Cancel = true;
+                return;
+            }
+        }
     }
 }

Modified: trunk/MySql.VisualStudio/Editors/ForeignKeyDialog.resx
===================================================================
--- trunk/MySql.VisualStudio/Editors/ForeignKeyDialog.resx	2008-12-15 18:47:08 UTC (rev 1487)
+++ trunk/MySql.VisualStudio/Editors/ForeignKeyDialog.resx	2008-12-15 21:55:25 UTC (rev 1488)
@@ -126,4 +126,7 @@
   <metadata name="fkGridColumn.UserAddedColumn" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
   </metadata>
+  <metadata name="fkColumnsBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>206, 17</value>
+  </metadata>
 </root>
\ No newline at end of file

Modified: trunk/MySql.VisualStudio/Editors/IndexColumnEditorDialog.cs
===================================================================
--- trunk/MySql.VisualStudio/Editors/IndexColumnEditorDialog.cs	2008-12-15 18:47:08 UTC (rev 1487)
+++ trunk/MySql.VisualStudio/Editors/IndexColumnEditorDialog.cs	2008-12-15 21:55:25 UTC (rev 1488)
@@ -48,7 +48,6 @@
             Type t = e.Control.GetType();
             if (t != typeof(DataGridViewComboBoxEditingControl)) return;
 
-            System.Diagnostics.Trace.WriteLine("EditControlShowing starting");
             DataGridViewComboBoxEditingControl ec = e.Control as DataGridViewComboBoxEditingControl;
             ec.DrawMode = DrawMode.OwnerDrawFixed;
             ec.DrawItem += new DrawItemEventHandler(dropdown_DrawItem);
@@ -75,15 +74,12 @@
                 int index = ec.FindStringExact(indexGrid.CurrentRow.Cells[0].Value as string);
                 if (index > 0)
                     ec.SelectedIndex = index;
-                System.Diagnostics.Trace.WriteLine("EditControlShowing_leaving");
             }
         }
 
         void dropdown_DrawItem(object sender, DrawItemEventArgs e)
         {
-            System.Diagnostics.Trace.WriteLine("DrawItem starting");
             MyComboBox.DrawComboBox(sender as ComboBox, e);
-            System.Diagnostics.Trace.WriteLine("DrawItem leaving");
         }
 
         private void okButton_Click(object sender, EventArgs e)
@@ -120,7 +116,6 @@
                     gr.SortOrder = "Ascending";
                 sortCell.Value = gr.SortOrder;
             }
-            System.Diagnostics.Trace.WriteLine("Validating leaving");
         }
 
         private void cancelButton_Click(object sender, EventArgs e)

Modified: trunk/MySql.VisualStudio/Properties/Resources.Designer.cs
===================================================================
--- trunk/MySql.VisualStudio/Properties/Resources.Designer.cs	2008-12-15 18:47:08 UTC (rev 1487)
+++ trunk/MySql.VisualStudio/Properties/Resources.Designer.cs	2008-12-15 21:55:25 UTC (rev 1488)
@@ -2423,6 +2423,24 @@
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to Both sides of a relationship must have the same number of columns..
+        /// </summary>
+        public static string FKColumnsNotMatched {
+            get {
+                return ResourceManager.GetString("FKColumnsNotMatched", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Expected column name..
+        /// </summary>
+        public static string FKNeedColumn {
+            get {
+                return ResourceManager.GetString("FKNeedColumn", resourceCulture);
+            }
+        }
+        
         public static System.Drawing.Bitmap Key {
             get {
                 object obj = ResourceManager.GetObject("Key", resourceCulture);

Modified: trunk/MySql.VisualStudio/Properties/Resources.resx
===================================================================
--- trunk/MySql.VisualStudio/Properties/Resources.resx	2008-12-15 18:47:08 UTC (rev 1487)
+++ trunk/MySql.VisualStudio/Properties/Resources.resx	2008-12-15 21:55:25 UTC (rev 1488)
@@ -1044,4 +1044,10 @@
   <data name="Key" type="System.Resources.ResXFileRef, System.Windows.Forms">
     <value>..\Resources\Key.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
   </data>
+  <data name="FKColumnsNotMatched" xml:space="preserve">
+    <value>Both sides of a relationship must have the same number of columns.</value>
+  </data>
+  <data name="FKNeedColumn" xml:space="preserve">
+    <value>Expected column name.</value>
+  </data>
 </root>
\ No newline at end of file

Thread
Connector/NET commit: r1488 - in trunk/MySql.VisualStudio: DbObjects Editors Propertiesrburnett15 Dec