问题 如何从福彩12选5走势图中读取数据一次,然后使用不同的按钮事件使用它?

Wowywow.

成员
加入
2019年11月9日
消息
16
编程经验
Beginner
嗨,所以我不得不制作这个应用程序,该应用程序将从文本福彩12选5走势图(名称,性别,Bday等)中获取数据,并将其加载到DataGridView表中。此外,还要添加到只需要3个按钮(女性,男性或比*设置年龄*的女性)。
我几乎做了我需要的东西,但每个按钮每次都必须读取该福彩12选5走势图。所以我想知道如何阅读一次福彩12选5走势图,然后留下按钮只能作为将设置数据的过滤器?

C#:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }


        // Nuskaityti moterys
        private void button1_Click(object sender, EventArgs e)
        {
            string systemPath = System.IO.Directory.GetCurrentDirectory() + @"\txt1.txt";

            using (var streamReader = new System.IO.StreamReader(systemPath))
            {
                dataGridView1.Rows.Clear();
                while (!streamReader.EndOfStream)
                {
                    string line = streamReader.ReadLine();
                    string[] values = line.Split('\t');

                    for (int i=0; i<values.Length; i++)
                    {
                        string[] rez = values[i].Split(',');
                        rez[2] = rez[2].Trim();

                        if (rez[2].ToString() == "Moteris")
                        {
                            int rowIndex = dataGridView1.Rows.Add();
                            dataGridView1.Rows[rowIndex].Cells["Column1"].Value = rez[0];
                            dataGridView1.Rows[rowIndex].Cells["Column2"].Value = rez[1];
                            dataGridView1.Rows[rowIndex].Cells["Column3"].Value = rez[2];
                            dataGridView1.Rows[rowIndex].Cells["Column4"].Value = rez[3];
                            dataGridView1.Rows[rowIndex].Cells["Column5"].Value = rez[4];
                            dataGridView1.Rows[rowIndex].Cells["Column6"].Value = rez[5];
                        }
                    }
                }
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            string systemPath = System.IO.Directory.GetCurrentDirectory() + @"\txt1.txt";

            using (var streamReader = new System.IO.StreamReader(systemPath))
            {
                dataGridView1.Rows.Clear();
                while (!streamReader.EndOfStream)
                {
                    string line = streamReader.ReadLine();
                    string[] values = line.Split('\t');

                    for (int i = 0; i < values.Length; i++)
                    {
                        string[] rez = values[i].Split(',');
                        rez[2] = rez[2].Trim();

                        if (rez[2].ToString() == "Vyras")
                        {
                            int rowIndex = dataGridView1.Rows.Add();
                            dataGridView1.Rows[rowIndex].Cells["Column1"].Value = rez[0];
                            dataGridView1.Rows[rowIndex].Cells["Column2"].Value = rez[1];
                            dataGridView1.Rows[rowIndex].Cells["Column3"].Value = rez[2];
                            dataGridView1.Rows[rowIndex].Cells["Column4"].Value = rez[3];
                            dataGridView1.Rows[rowIndex].Cells["Column5"].Value = rez[4];
                            dataGridView1.Rows[rowIndex].Cells["Column6"].Value = rez[5];
                        }
                    }
                }
            }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            string systemPath = System.IO.Directory.GetCurrentDirectory() + @"\txt1.txt";

            using (var streamReader = new System.IO.StreamReader(systemPath))
            {
                dataGridView1.Rows.Clear();
                while (!streamReader.EndOfStream)
                {
                    string line = streamReader.ReadLine();
                    string[] values = line.Split('\t');

                    for (int i = 0; i < values.Length; i++)
                    {
                        string[] rez = values[i].Split(',');
                        string date;

                        date = rez[5].Replace("-", "");
                        int today = int.Parse(DateTime.UtcNow.ToString("yyyyMMdd"));
                        int bDay = int.Parse(date);
                        int age = (today - bDay) / 10000;
                        int filterDate = Convert.ToInt32(textBox1.Text);

                        if (age >= filterDate)
                        {
                            int rowIndex = dataGridView1.Rows.Add();
                            dataGridView1.Rows[rowIndex].Cells["Column1"].Value = rez[0];
                            dataGridView1.Rows[rowIndex].Cells["Column2"].Value = rez[1];
                            dataGridView1.Rows[rowIndex].Cells["Column3"].Value = rez[2];
                            dataGridView1.Rows[rowIndex].Cells["Column4"].Value = rez[3];
                            dataGridView1.Rows[rowIndex].Cells["Column5"].Value = rez[4];
                            dataGridView1.Rows[rowIndex].Cells["Column6"].Value = rez[5];
                        }
                    }
                }
            }
        }
    }
}

提前致谢!
 

sh

退休程序员
工作人员
加入
2018年9月5日
消息
1,968
地点
英国
编程经验
10+
您可以提供所指的文本福彩12选5走势图。

我已经希望将其读入一个数组,但我会知道一旦我看到文本福彩12选5走势图一旦知道。

顺便说一下,欢迎来到论坛
 

Wowywow.

成员
加入
2019年11月9日
消息
16
编程经验
Beginner
您可以提供所指的文本福彩12选5走势图。

我已经希望将其读入一个数组,但我会知道一旦我看到文本福彩12选5走势图一旦知道。

顺便说一下,欢迎来到论坛
姓名,姓氏,性别,电子邮件,地址,出生日期
这几乎是格式,我填写了福彩12选5走势图:
姓名1,姓氏1,女性, [email protected],Street1,2000-01-01
name2,姓氏,男, [email protected],Street2,1988-01-06
等等......对于你想要的时间(用于测试目的,我保持简单)。

并谢谢。
 

sh

退休程序员
工作人员
加入
2018年9月5日
消息
1,968
地点
英国
编程经验
10+
不,请按要求将福彩12选5走势图附加到论坛。
 

jmplhinney.

C#论坛主持人
工作人员
加入
2011年4月23日
消息
3,553
地点
悉尼,澳大利亚
编程经验
10+
You should start by reading the file into a DataTable, using either an OleDbDataAdapter or a TextFieldParser.. The latter is declared in the Microsoft.VisualBasic.dll assembly, so you'd need to reference that. As with any object that you need to access at arbitrary times, you should assign the DataTable to a member variable, i.e. a field. You can then bind the DataTable to a BindingSource 和 bind that to your DataGridView. You can then filter the data by setting the Filter property of BindingSource, e.g.
C#:
myBindingSource.Filter = "Gender = 'Female'";
或者:
C#:
var ageThreshold = Convert.ToInt32(ageNumericUpDown.Value);
var dateThreshold = DateTime.Today.AddYears(-ageThreshold);

myBindingSource.Filter = $"[Date of birth] <= #{dateThreshold:M/dd/yyyy}#";
 
Last edited:

sh

退休程序员
工作人员
加入
2018年9月5日
消息
1,968
地点
英国
编程经验
10+
我只回答了这个同样的问题约3,4周前在这里和这里 六月回来。从文本福彩12选5走势图接收此数据的问题需要数据每次都具有完全相同的结构。例如,你能保证是否会有第二条街?因为如果有的话,它会使您在加入文本时使用不可靠的方法。我的问题是;是否有可能以文本以外的另一种格式具有数据,或许XML?预防总是比治疗更好。但是,如果您对当前的收到此数据感到满意,那么John的回复将解决您的第二部分问题。
 

跳伞运动员

工作人员
加入
2019年4月6日
消息
2,580
地点
切萨皮克,va.
编程经验
10+
并记得仍然用于电子邮件地址的RFC5322仍然有支持引用的字符串,因此以下是法律电子邮件地址:
C#:
"Last, First"@domain.com
请注意电子邮件地址中的逗号,因为引号,在这种情况下是合法的。
 

jmplhinney.

C#论坛主持人
工作人员
加入
2011年4月23日
消息
3,553
地点
悉尼,澳大利亚
编程经验
10+
并记得仍然用于电子邮件地址的RFC5322仍然有支持引用的字符串,因此以下是法律电子邮件地址:
C#:
"Last, First"@domain.com
请注意电子邮件地址中的逗号,因为引号,在这种情况下是合法的。
我没有意识到这一点。当然,任何使用此类电子邮件地址的人都不值得接收任何电子邮件,我认为大量系统可能不会接受它。

Of course, well-written parsing code would handle that anyway, if the file was also well-written. If you escape any double-quotes with another double-quote and wrap any values that contains delimiters in double-quotes then a TextFieldParser. will handle it and I'd wager that ADO.NET would too.
 

Wowywow.

成员
加入
2019年11月9日
消息
16
编程经验
Beginner
我只回答了这个同样的问题约3,4周前在这里和这里 六月回来。从文本福彩12选5走势图接收此数据的问题需要数据每次都具有完全相同的结构。例如,你能保证是否会有第二条街?因为如果有的话,它会使您在加入文本时使用不可靠的方法。我的问题是;是否有可能以文本以外的另一种格式具有数据,或许XML?预防总是比治疗更好。但是,如果您对当前的收到此数据感到满意,那么John的回复将解决您的第二部分问题。
哦,我只是第一年,我们只是覆盖C#的基础知识。我们不会占据这一学期非常困难的事情,因此文本福彩12选5走势图将始终保持相同的格式。
 

跳伞运动员

工作人员
加入
2019年4月6日
消息
2,580
地点
切萨皮克,va.
编程经验
10+
我认为很多系统可能不可能接受它。
是的,不幸的是很多"front-end"UI不接受它,同样的方式也不接受'+','{'或'}''符号。我相信这是因为他们天真地撇去了RFC和/或只是扼杀了别人的regex来验证电子邮件地址。如上所述,不应使用正则表达式验证电子邮件地址,但人们仍然这样做。

不应该这样做的地方部分电子邮件地址的限制,但人们似乎似乎仍然这样做。对我来说,这听起来不公平和文化上不敏感那样"您只允许完全一个名字,一个可选的中间名和姓氏 - 按此顺序"。本地部分的点是它由目的地域名进行进一步解析。消息传输代理必须执行的唯一工作是将消息传输到适当的域。他们不应该从本地部分派生和特殊信息。然而,在这里,我们与人们写UI的人并对本地部分施加限制。

这就像说'+'是的 无效用于电子邮件地址的本地部分 .
 

sh

退休程序员
工作人员
加入
2018年9月5日
消息
1,968
地点
英国
编程经验
10+
C#:
        public static readonly string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "mytext.txt");
        public static List<string[]> IEnum = new List<string[]>();
我在桌面上存储了TextFile,因此路径点点并将路径目录与福彩12选5走势图名组合。列表<T>Ienum是每行读取的占位符,它们被分解符分解 TextFieldParser. 何先推荐的约翰之前。它也是可行的,所以你可以很好地使用它 使用陈述。解析器实际上非常好,它通过使用CSV福彩12选5走势图或甚至可以轻松使用CSV福彩12选5走势图 TextFieldParser..readFields方法(Microsoft.VisualBasic.fileio)。它还具有一些非常好的属性,如: TextFieldParser..TrimWhiteSpace属性(Microsoft.VisualBasic.fileio) 如果您需要或想要修剪任何空格。它还允许您检查您的线路是否包含引号中的单词: TextFieldParser..hasfieldSenclosedInquotes属性(Microsoft.VisualBasic.fileio).

无论如何,我开始使用一个按钮将数据从福彩12选5走势图中获取到Ienum(定义上面),Ienum存储字符串[]列表<string[]> - 这就是您在列表中找到自己的索引的位置,每个索引都包含一个字符串数组条目,您可以在其中访问逗号中的逗号分隔的数据条目,该福彩12选5走势图在福彩12选5走势图中,存储在福彩12选5走势图中字符串数组。请参阅调试器:
screenshot_43.jpg.

C#:
        private void Button1_Click(object sender, EventArgs e)
        {
            using (FileStream reader = File.OpenRead(path))
            using (TextFieldParser iParse = new TextFieldParser(reader))
            {
                iParse.Delimiters = new[] { "," }; iParse.HasFieldsEnclosedInQuotes = false;
                do
                    IEnum.Add(iParse.ReadFields());
                while (!iParse.EndOfData);
            }
        }
既然您的福彩12选5走势图内容在IENUM列表中正确构建了,您可以迭代它以访问这样的详细信息:
C#:
        private void button2_Click(object sender, EventArgs e)
        {
            foreach (var (firstName, secondName)
                in from string[] line in IEnum
                   let firstName = line[0]
                   let secondName = line[1]
                   let genderType = line[2]
                   let emailAddress = line[3]
                   let personalAddress = line[4]
                   let personalDOB = line[5]
                   select (firstName, secondName))
            /* To get more variables, you need to extend Linq to iterate over and select the additional's */
            {
                Console.WriteLine($"Persons first name is : {firstName}");
                var fullName = string.Concat(firstName, string.Empty.PadRight(1), secondName);
                Console.WriteLine($"Persons Full Name is : {string.Concat(firstName, string.Empty.PadRight(1), secondName)}");
            }
        }
对不起,我用linq,因为它是习惯的力量,我忘了我正在为论坛写作。但它与循环中的福切或循环相同....我相信你会搞砸 - 哦,到底是什么,我心情愉快。试试这个 :
C#:
        private void button3_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < IEnum.Count; i++)
            {
                Console.WriteLine(IEnum[i][0]);
                /* [i] iterates the IEnum, while [0] (if changed) will give you a different result, first name [0] second name be [1] etc */
            }
        }
有了这个,你现在不再需要继续阅读福彩12选5走势图。并结合上面的同时:
You should start by reading the file into a DataTable, using either an OleDbDataAdapter or a TextFieldParser.. The latter is declared in the Microsoft.VisualBasic.dll assembly, so you'd need to reference that. As with any object that you need to access at arbitrary times, you should assign the DataTable to a member variable, i.e. a field. You can then bind the DataTable to a BindingSource 和 bind that to your DataGridView. You can then filter the data by setting the Filter property of BindingSource, e.g.
C#:
myBindingSource.Filter = "Gender = 'Female'";
或者:
C#:
var ageThreshold = Convert.ToInt32(ageNumericUpDown.Value);
var dateThreshold = DateTime.Today.AddYears(-ageThreshold);

myBindingSource.Filter = $"[Date of birth] <= #{dateThreshold:M/dd/yyyy}#";
您应该有一个完全工作的应用程序,就像您所要求的那样。如果您陷入困境或需要更多信息,请邮寄给我们。

哦,我只是第一年,我们只是覆盖C#的基础知识。我们不会占据这一学期非常困难的事情,因此文本福彩12选5走势图将始终保持相同的格式。
这是纯粹的一厢情愿,我从不厌倦抱怨的东西,但我希望学校将更多地努力给予更实际的作业。请记住,我对上面关于福彩12选5走势图结构的评论所说的话。如果您的老师决定将人员中间名添加到福彩12选5走势图中,这将抛出我从蜡像中所做的一切,它不会按预期工作。因此,在我看来,使你的作业相当贫穷。

希望能帮助到你。
 
Last edited:
最佳 底部