FrmPollList.cs 14 KB
/*-------------------------------------------------------------------------------------------
 * 选举名单窗体
 * 创建:2011-11-30
 * 修改:杨斌 2012-03-01 Esc退出(设置窗体CancelButton),其他窗体类似
 * ----------------------------------------------------------------------------------------*/
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using GeneralLib;
using System.IO;

namespace SunVoteARSPPT
{
    public partial class FrmPollList : Form
    {
        TagSet mTagSet = null;
        public TagSet TagSet
        {
            get { return mTagSet; }
            set
            {
                mTagSet = value;
            }
        }


        /// <summary>
        /// 记录原候选人ID
        /// </summary>
        private string oldCandidateID = "";

        private bool SaveOK = true;
        bool CanEdit = true;

        public FrmPollList(TagSet tagSet, bool canEdit)
        {
            InitializeComponent();
            TagSet = tagSet;
            CanEdit = canEdit;
            btnImport.Enabled = CanEdit;
        }

        private void btnExit_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnSave_Click(object sender, EventArgs e)
        {
            if (!CheckPollList()) { return; }
            SavePollList();
            SaveOK = true;
            //MessageBox.Show("保存成功", "ARS2011");
        }

        private void FrmPollList_Load(object sender, EventArgs e)
        {
            GlobalInfo.SysLanguage.SetLanguage(this.Name, this);
            lblExportSuccess.Text = "";
            LoadPollList();
        }

        /// <summary>
        /// 加载候选人列表
        /// </summary>
        private void LoadPollList()
        {
            string CandidateID = "";
            string CandidateName = "";
            int PollCount = TagSet.LoadValue(TagKey.Poll_CandidatesCount, 0).ToInt;
            if (PollCount > 0)
                dgvVoterList.RowCount = PollCount;
            else
                dgvVoterList.RowCount = 0;//杨斌 2012-03-06
            for (int i = 0; i < PollCount; i++)
            {
                CandidateID = TagSet.LoadValue(TagKey.Poll_CandidatesID_, i, "").Value.ToString();
                CandidateName = TagSet.LoadValue(TagKey.Poll_CandidatesName_, i, "").Value.ToString();
                dgvVoterList.Rows[i].Cells["colPollID"].Value = CandidateID;
                dgvVoterList.Rows[i].Cells["colPollName"].Value = CandidateName;
            }
            ControlOper.SetGridRowH(dgvVoterList);//杨斌 2016-03-04
        }

        /// <summary>
        /// 保存候选人列表
        /// </summary>
        private void SavePollList()
        {
            string CandidateID = "";
            string CandidateName = "";
            int PollCount = 0;

            for (int i = 0; i < dgvVoterList.Rows.Count; i++)
            {
                if (dgvVoterList.Rows[i].Cells["colPollID"].Value == null) { continue; }
                CandidateID = dgvVoterList.Rows[i].Cells["colPollID"].Value.ToString().Trim();
                CandidateName = (dgvVoterList.Rows[i].Cells["colPollName"].Value != null) ? dgvVoterList.Rows[i].Cells["colPollName"].Value.ToString().Trim() : "";
                TagSet.SetValue(TagKey.Poll_CandidatesID_, i, CandidateID);
                TagSet.SetValue(TagKey.Poll_CandidatesName_, i, CandidateName);
                PollCount += 1;
            }
            TagSet.SetValue(TagKey.Poll_CandidatesCount, PollCount);
            //MessageBox.Show(GlobalInfo.SysLanguage.LPT.ReadString(this.Name,"SaveSuccess" ,"保存成功"), "ARS2011");
        }

        private void FrmPollList_FormClosed(object sender, FormClosedEventArgs e)
        {

            if (!SaveOK)
            {
                //if (MessageBox.Show("候选名单未保存,是否保存?", "ARS2011", MessageBoxButtons.YesNo,
                //    MessageBoxIcon.Question) == DialogResult.Yes)
                //{
                //SavePollList();
                //}

            }
        }

        private void dgvVoterList_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
        {
            if (e.RowIndex >= 0)
            {
                if (dgvVoterList.Columns[e.ColumnIndex].Name == "colPollID")
                {
                    oldCandidateID = (dgvVoterList.Rows[e.RowIndex].Cells[e.ColumnIndex].Value != null) ? dgvVoterList.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString() : "";
                }
            }
        }

        private void dgvVoterList_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            //string newCandidateID = "";
            //string candidateID="";
            //if (e.RowIndex >= 0)
            //{
            //    if (dgvVoterList.Columns[e.ColumnIndex].Name == "colPollID")
            //    {
            //        newCandidateID = (dgvVoterList.Rows[e.RowIndex].Cells["colPollID"].Value != null) ? dgvVoterList.Rows[e.RowIndex].Cells["colPollID"].Value.ToString() : "";
            //        for (int i = 0; i < dgvVoterList.Rows.Count; i++)
            //        {
            //            //已存在的候选人编号
            //            candidateID = (dgvVoterList.Rows[i].Cells["colPollID"].Value != null) ? dgvVoterList.Rows[i].Cells["colPollID"].Value.ToString() : "";
            //            if ((i != e.RowIndex) && (newCandidateID ==candidateID))
            //            {
            //                dgvVoterList.Rows[e.RowIndex].Cells["colPollID"].Value =oldCandidateID;
            //                MessageBox.Show("该编号已经存在","ARS2011");
            //                break;
            //            }
            //        }
            //    }
            //}
            SaveOK = false;
        }

        private void btnImport_Click(object sender, EventArgs e)
        {
            //ExcelOper exl = new ExcelOper();
            lblExportSuccess.Text = GlobalInfo.SysLanguage.LPT.ReadString(this.Name, "ImportData", "数据导入");
            string fileName = "";
            string[,] PollList = null;
            //数据开始行
            int StarRowIndex = 1;
            //候选人编号列
            int IDColIndex = 0;
            //候选人名称列
            int NameColIndex = 1;

            //杨斌 2014-10-21
            string path = new DirectoryInfo(GlobalInfo.GetAppWorkDir()).Parent.FullName;
            path += @"\Resources\PollList\";
            openFileDialog.InitialDirectory = path;

            //openFileDialog.Filter = "Execl files (*.xls)|*.xls|Excel files (*.xlsx)|*.xlsx";
            //openFileDialog.Filter = "Excel(*.xls;*.xlsx)|*.xls;*.xlsx";//杨斌 2012-03-05
            //openFileDialog.Filter = "Excel(*.xls;*.xlsx)|*.xls;*.xlsx|CSV(*.csv)|*.csv";//杨斌 2017-10-30
            openFileDialog.Filter = "Excel(*.xlsx)|*.xlsx|CSV(*.csv)|*.csv";//杨斌 2018-12-18。不兼容2003格式
            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
                fileName = openFileDialog.FileName;

                bool isCSV = (Path.GetExtension(fileName).ToLower() == ".csv");//杨斌 2018-05-14
                if (isCSV)
                {
                    PollList = ExcelOper.ImportCSV(fileName);
                }
                else
                {
                    ExcelOper exl = new ExcelOper();                    
                    exl.OpenExcel(fileName);
                    PollList = exl.ImportToSheetBySheetNum(1);//杨斌 2018-05-14               
                    exl.CloseExcel();
                }
                if (PollList != null)
                {
                    int iRowCount = PollList.GetLength(0);
                    int iColCount = PollList.GetLength(1);
                    dgvVoterList.RowCount = iRowCount - 1;
                    for (int i = 0; i < iRowCount - 1; i++)
                    {
                        dgvVoterList.Rows[i].Cells[0].Value = PollList[i + StarRowIndex, IDColIndex];
                        dgvVoterList.Rows[i].Cells[1].Value = PollList[i + StarRowIndex, NameColIndex];
                    }
                    ControlOper.SetGridRowH(dgvVoterList);//杨斌 2016-03-04
                }
            }
            else
            {
                //取消操作不是失败。杨斌 2012-02-29,另外窗体界面控件停靠属性和位置改了
                //lblExportSuccess.Text = GlobalInfo.SysLanguage.LPT.ReadString(this.Name, "ImportFail", "导入失败");
                return;
            }
            if (!CheckPollList())
            {
                dgvVoterList.Rows.Clear();
                lblExportSuccess.Text = GlobalInfo.SysLanguage.LPT.ReadString(this.Name, "ImportFail", "导入失败");
                return;
            }
            SavePollList();
            SaveOK = true;
            lblExportSuccess.Text = GlobalInfo.SysLanguage.LPT.ReadString(this.Name, "ImportSuccess", "导入成功");
            //new FrmImportCandidate(dgvVoterList).ShowDialog();
        }

        private void btnInsert_Click(object sender, EventArgs e)
        {
            dgvVoterList.Rows.Insert(dgvVoterList.CurrentRow.Index, 1);
        }

        private void btnDelete_Click(object sender, EventArgs e)
        {
            if (dgvVoterList.CurrentRow.Index != dgvVoterList.Rows.Count - 1)
            {
                dgvVoterList.Rows.RemoveAt(dgvVoterList.CurrentRow.Index);
                SaveOK = false;
            }

        }

        /// <summary>
        /// 检测候选人列表
        /// 修改:杨斌 2012-05-16
        /// </summary>
        /// <returns></returns>
        private bool CheckPollList()
        {
            bool bValue = true;
            string newCandidateID = "";
            string candidateID = "";
            int CandidateCount = TagSet.LoadValue(TagKey.Poll_CandidatesCount, 0).ToInt;
            //修改标志 赵丽 2012-06-06 导入的候选人为空时,提示失败
            if ((dgvVoterList.Rows.Count == 0) && (CandidateCount == 0)) { return false; }

            if (dgvVoterList.Rows.Count == 0) { TagSet.SetValue(TagKey.Poll_CandidatesCount, 0); return bValue; }
            dgvVoterList.CurrentCell.Selected = false;
            for (int i = 0; i < dgvVoterList.Rows.Count - 1; i++)
            {
                newCandidateID = (dgvVoterList.Rows[i].Cells["colPollID"].Value != null) ? dgvVoterList.Rows[i].Cells["colPollID"].Value.ToString() : "";
                if (!PublicFunction.IsMatchWith(newCandidateID, @"^\d+$"))
                {
                    MessageBox.Show(GlobalInfo.SysLanguage.LPT.ReadString(this.Name, "CheckMessage1", "候选人编号只允许输入数字,,请修改候选名单列表"), GlobalInfo.GetAppName());
                    bValue = false;
                    dgvVoterList.Rows[i].Cells["colPollID"].Selected = true;
                    break;
                }
                if (newCandidateID == "")
                {
                    MessageBox.Show(GlobalInfo.SysLanguage.LPT.ReadString(this.Name, "CheckMessage2", "候选人编号不能为空,,请修改候选名单列表"), GlobalInfo.GetAppName());
                    bValue = false;
                    dgvVoterList.Rows[i].Cells["colPollID"].Selected = true;
                    break;
                }
                for (int j = i + 1; j < dgvVoterList.Rows.Count; j++)
                {
                    candidateID = (dgvVoterList.Rows[j].Cells["colPollID"].Value != null) ? dgvVoterList.Rows[j].Cells["colPollID"].Value.ToString() : "";
                    if (newCandidateID == candidateID)
                    {
                        dgvVoterList.Rows[j].Cells["colPollID"].Selected = true;
                        MessageBox.Show(GlobalInfo.SysLanguage.LPT.ReadString(this.Name, "CheckMessage3", "候选人编号有重复,,请修改候选名单列表"), GlobalInfo.GetAppName()); bValue = false;
                        break;
                    }
                }
            }
            return bValue;
        }

        private void FrmPollList_FormClosing(object sender, FormClosingEventArgs e)
        {
            //有未保存的数据
            //int CandidateCount = TagSet.LoadValue(TagKey.Poll_CandidatesCount, 0).ToInt;
            //if ((dgvVoterList.Rows.Count == 1) && (CandidateCount==0)) {  return; }
            //if (!SaveOK)
            //{
            //    if (MessageBox.Show(GlobalInfo.SysLanguage.LPT.ReadString(this.Name,"SavePollList", "候选名单未保存,是否保存?"), "ARS2011", MessageBoxButtons.YesNo,
            //        MessageBoxIcon.Question) == DialogResult.Yes)
            //    {
            //        if (dgvVoterList.Rows.Count == 1) { TagSet.SetValue(TagKey.Poll_CandidatesCount, 0); }
            //        if (!CheckPollList())
            //            e.Cancel = true;
            //    }
            //    else
            //        SaveOK = true;

            //}

        }

        private void btnExport_Click(object sender, EventArgs e)
        {
            //openFileDialog.InitialDirectory = "C:\\";
            //openFileDialog.Filter = "文本文件|*.*|C#文件|*.cs|所有文件|*.*";
            //openFileDialog.RestoreDirectory = true;
            //openFileDialog.FilterIndex = 1;
            //if (openFileDialog.ShowDialog() == DialogResult.OK)
            //{
            //    string fName = openFileDialog.FileName;
            //}
            //if (PublicFunction.ExportToExcel(dgvVoterList, GlobalInfo.SysLanguage.LPT.ReadString(this.Name, "ExcelTitle", "候选人名单")))

            //    MessageBox.Show(GlobalInfo.SysLanguage.LPT.ReadString(this.Name,"ExportSucceed", "导出成功"), "SunVote ARS PPT 2012");
            //   // lblExportSuccess.Visible = true;
            this.Cursor = Cursors.WaitCursor;
            string[,] aryTable = ControlOper.AryFromDataGrid(dgvVoterList);
            ExcelOper.ExportArrayToExcel(aryTable, GlobalInfo.SysLanguage.LPT.ReadString(this.Name, "ExcelTitle", "候选人名单"));
            this.Cursor = Cursors.Default;
        }

    }


}