v9.8.2018.0605   由DataReader直接映射实体列表,以支持netstandard的MySql和SQLite,且提升性能
大石头 编写于 2018-06-05 00:45:23
X
using System;
using System.Windows.Forms;
using XCode.DataAccessLayer;

namespace XCoder
{
    public partial class AddField : UserControl
    {
        public AddField()
        {
            InitializeComponent();
        }

        private IDataColumn DataColumn;
        //是否添加,默认是添加数据
        private Boolean IsNew = true;

        public AddField(IDataColumn dc, Boolean isNew)
        {
            InitializeComponent();
            IsNew = isNew;


            combRawType.DataSource = PrimitiveType.TypeList;
            //combRawType.DisplayMember = "Name";
            //combRawType.ValueMember = "DataType";

            DataColumn = dc;

            //修改的话,直接绑定数据到文本框
            if (!IsNew) BandText();
        }

        //绑定数据
        void BandText()
        {
            txtName.Text = DataColumn.Name;
            //txtDefault.Text = DataColumn.Default;
            txtDescription.Text = DataColumn.Description;
            txtLength.Text = DataColumn.Length.ToString();
            //txtNumOfByte.Text = DataColumn.NumOfByte.ToString();
            //txtPrecision.Text = DataColumn.Precision.ToString();
            if (DataColumn.DataType != null)
            {
                txtDataType.Text = DataColumn.DataType.Name;
            }
            if (DataColumn.RawType.Contains("nvarchar")) combRawType.SelectedIndex = 3;
            else combRawType.SelectedIndex = PrimitiveType.TypeList.FindIndex(n => n.Name.Contains(DataColumn.RawType));

            combRawType.Text = DataColumn.RawType;

            ckbIdentity.Checked = DataColumn.Identity;

            ckbNullable.Checked = DataColumn.Nullable;
            ckbPrimarykey.Checked = DataColumn.PrimaryKey;
        }

        //保存数据
        void SaveValue()
        {
            DataColumn.Name = txtName.Text.Trim();
            //DataColumn.Default = txtDefault.Text.Trim();
            DataColumn.Description = txtDescription.Text.Trim();
            DataColumn.Length = Convert.ToInt32(txtLength.Text.Trim());
            //DataColumn.NumOfByte = Convert.ToInt32(txtNumOfByte.Text.Trim());
            //DataColumn.Precision = Convert.ToInt32(txtPrecision.Text.Trim());
            DataColumn.DataType = Type.GetType(txtDataType.Text.Trim());

            if (combRawType.SelectedIndex != 3)
            {
                DataColumn.RawType = combRawType.Text.Trim();
            }
            else
            {
                DataColumn.RawType = String.Format(combRawType.Text.Trim() + "({0})", DataColumn.Length);
            }

            DataColumn.Identity = ckbIdentity.Checked;
            DataColumn.Nullable = ckbNullable.Checked;
            DataColumn.PrimaryKey = ckbPrimarykey.Checked;
            DataColumn.ColumnName = DataColumn.Name;
        }

        public static BaseForm CreateForm(IDataColumn column, Boolean isNew)
        {
            var frm = new AddField(column, isNew);
            frm.Dock = DockStyle.Fill;
            return WinFormHelper.CreateForm(frm, "编辑字段信息");
        }

        private void combRawType_SelectedIndexChanged(Object sender, EventArgs e)
        {
            if (combRawType.SelectedIndex == 3)
            {
                txtLength.Enabled = true;
                if (!IsNew) txtLength.Text = DataColumn.Length.ToString();
                else
                {
                    txtDataType.Text = PrimitiveType.TypeList[combRawType.SelectedIndex].DataType;
                    txtLength.Text = PrimitiveType.TypeList[combRawType.SelectedIndex].Length.ToString();
                    //txtNumOfByte.Text = PrimitiveType.TypeList[combRawType.SelectedIndex].NumOfByte.ToString();
                    //txtPrecision.Text = PrimitiveType.TypeList[combRawType.SelectedIndex].Precision.ToString();
                }
            }
            else
            {
                txtLength.Enabled = false;
                txtDataType.Text = PrimitiveType.TypeList[combRawType.SelectedIndex].DataType;
                txtLength.Text = PrimitiveType.TypeList[combRawType.SelectedIndex].Length.ToString();
                //txtNumOfByte.Text = PrimitiveType.TypeList[combRawType.SelectedIndex].NumOfByte.ToString();
                //txtPrecision.Text = PrimitiveType.TypeList[combRawType.SelectedIndex].Precision.ToString();
            }
        }

        private void btnSave_Click(Object sender, EventArgs e)
        {
            SaveValue();
            ParentForm.DialogResult = DialogResult.OK;
            ParentForm.Close();
        }

        private void btnCancle_Click(Object sender, EventArgs e)
        {
            ParentForm.DialogResult = DialogResult.Cancel;
            ParentForm.Close();
        }

        private void txtLength_TextChanged(Object sender, EventArgs e)
        {
            //if (combRawType.SelectedIndex == 3)
            //{
            //    txtPrecision.Text = txtLength.Text;
            //}
        }

        private void txtLength_KeyPress(Object sender, KeyPressEventArgs e)
        {
            WinFormHelper.SetControlOnlyZS(sender, e);
        }
    }
}