1

我正在尝试获取“名字、姓氏、关联 ID 等”。在我的表单上的数据网格中显示。我是一个新的程序员/脚本小子,如果这是一个愚蠢的问题,我很抱歉。我只是不知道如何调用 associateList.firstName 到可读的数据网格条目。

如果可能,我希望数据网格使用 associateList 中的每个关联。正在考虑以某种方式在索引参考上建立一个基本计数器。

关于我如何编写代码的其他输入也很受欢迎。我是新手,是自学的。

简而言之:我希望员工在数据网格中显示,使用列来分隔信息。

数据网格名称是 windows 窗体上的 dataGridAssociates。

namespace Associate_Tracker
{
    public partial class Form1 : Form
    {
        public class Associate
        {
            //No idea wtf {get; set;} does but I read that I need it?

            public string firstName { get; set; }
            public string lastName { get; set; }
            public string assocRFID { get; set; }
            public int assocID { get; set; }
            public bool canDoDiverts { get; set; }
            public bool canDoMHE { get; set; }
            public bool canDoLoading { get; set; }
        }

        public Form1()
        {
            InitializeComponent();
        }

        private void buttonAddAssoc_Click(object sender, EventArgs e)
        {
            #region Datagrid Creation -- Name: dt
            DataTable dt = new DataTable();
            dt.Columns.Add("First Name");
            dt.Columns.Add("Last Name");
            dt.Columns.Add("RFID");
            dt.Columns.Add("Associate ID#");
            dt.Columns.Add("Diverts");
            dt.Columns.Add("MHE");
            dt.Columns.Add("Loading");
            dataGridAssociates.DataSource = dt;
            #endregion

            //First & Last name splitter
            string allValue = textBoxAssocName.Text;
            string firstNameTemp = String.Empty;
            string lastNameTemp = String.Empty;
            int getIndexOfSpace = allValue.IndexOf(' ');

            for (int i = 0; i < allValue.Length; i++)
            {
                if (i < getIndexOfSpace)
                {
                    firstNameTemp += allValue[i];
                }
                else if (i > getIndexOfSpace)
                {
                    lastNameTemp += allValue[i];
                }
            }
            firstNameTemp = firstNameTemp.Trim(); // To remove empty spaces
            lastNameTemp = lastNameTemp.Trim();   // To Remove Empty spaces
            //End splitter

            int assocIDTemp;    //TryParse succeeds
            bool assocIDparse;  //Bool for TryParse

            //Try Parsing Associate ID to an integer
            //Includes catch -> return
            assocIDparse = int.TryParse(textBoxAssocID.Text, out assocIDTemp);
            if (assocIDparse == false)
            {
                MessageBox.Show("Please use only numbers in the AssocID input");
                return;
            }
            var associateList = new List<Associate>();
            associateList.Add(new Associate
            {
                firstName = firstNameTemp,
                lastName = lastNameTemp,
                assocID = assocIDTemp,
                canDoDiverts = checkBoxDiverts.Checked,
                canDoMHE = checkBoxMHE.Checked,
                canDoLoading = checkBoxLoading.Checked,
            });
            textBoxAssocID.Clear();
            textBoxAssocName.Clear();
            textBoxRFID.Clear();
        }
    }
}
4

2 回答 2

0

我不会说这是执行此操作的最优雅的方式,但使用 WinForms 和 DataGridView 控件,您可以使用 BindingSource 控件执行此操作。我在下面添加了一个带有修改后的代码的示例,以实现您想要做的事情。

这里需要注意的关键点如下:

  • 请注意在顶部创建的 BindingSource 实例。这是我用来在构造函数中绑定到 DataGridView 的元素
  • 在构造函数中,我将关联列表的实例附加到 BindingSource 的 DataSource
  • 再次在构造函数中,我将 BindingSource 附加到 DataGridView 控件的 DataSource。
  • 最后在按钮事件的底部,我首先在 BindingSource 中使用 AddNew 创建 Associate 的实例(这将在构造函数中的 Asociate 列表实例中自动创建)并为其分配适当的值,然后填充到 DataGridView直接地。

有什么问题告诉我。

    readonly BindingSource _bindingSource = new BindingSource();

    public Form1()
    {
        InitializeComponent();
        _bindingSource.DataSource = new List<Associate>();
        dataGridAssociates.DataSource = _bindingSource;
    }

    public class Associate
    {
        public string firstName { get; set; }
        public string lastName { get; set; }
        public string assocRFID { get; set; }
        public int assocID { get; set; }
        public bool canDoDiverts { get; set; }
        public bool canDoMHE { get; set; }
        public bool canDoLoading { get; set; }
    }

    private void buttonAddAssoc_Click(object sender, EventArgs e)
    {
        //First & Last name splitter
        string allValue = textBoxAssocName.Text;
        string firstNameTemp = String.Empty;
        string lastNameTemp = String.Empty;
        int getIndexOfSpace = allValue.IndexOf(' ');

        for (int i = 0; i < allValue.Length; i++)
        {
            if (i < getIndexOfSpace)
            {
                firstNameTemp += allValue[i];
            }
            else if (i > getIndexOfSpace)
            {
                lastNameTemp += allValue[i];
            }
        }
        firstNameTemp = firstNameTemp.Trim(); // To remove empty spaces
        lastNameTemp = lastNameTemp.Trim(); // To Remove Empty spaces
        //End splitter

        int assocIDTemp; //TryParse succeeds
        bool assocIDparse; //Bool for TryParse

        //Try Parsing Associate ID to an integer
        //Includes catch -> return
        assocIDparse = int.TryParse(textBoxAssocID.Text, out assocIDTemp);
        if (assocIDparse == false)
        {
            MessageBox.Show("Please use only numbers in the AssocID input");
            return;
        }

        var obj = (Associate) _bindingSource.AddNew();
        if (obj != null)
        {
            obj.firstName = firstNameTemp;
            obj.lastName = lastNameTemp;
            obj.assocID = assocIDTemp;
            obj.canDoDiverts = checkBoxDiverts.Checked;
            obj.canDoMHE = checkBoxMHE.Checked;
            obj.canDoLoading = checkBoxLoading.Checked;
        }

        textBoxAssocID.Clear();
        textBoxAssocName.Clear();
        textBoxRFID.Clear();

    }
于 2012-11-27T01:07:27.010 回答
0
DataTable dt=new DataTable(); 
dt.clear(); 

dt.Columns.Add("First Name");
dt.Columns.Add("Last Name");
dt.Columns.Add("RFID");
dt.Columns.Add("Associate ID#");
dt.Columns.Add("Diverts");
dt.Columns.Add("MHE");
dt.Columns.Add("Loading")

DataRow yourDataRow = dt.NewDataRow();
yourDataRow["First Name"] = //assign the value for FirstName here;
yourDataRow["Last Name"] = //assing the value for LastName here; 
dt.Rows.Add(yourDataRow);

如果您要在循环中执行此操作.. 这应该给您一个很好的例子来说明从哪里开始..

*不要忘记,在将 DataSource 分配给 DataGrid 之后,您将其绑定,如下所示 *

GridView1.DataSource=dt;
GridView1.DataBind();
于 2012-11-27T00:26:37.413 回答