private void buttonLoad_Click(object sender, EventArgs e)
{
OnLoadTextFile();
}
void OnLoadTextFile()
{
OpenFileDialog f1 = new OpenFileDialog();
f1.Title = “文件加载”;
f1.Filter = “文本文档(*.txt)|*.txt”;
if (f1.ShowDialog() == DialogResult.OK)
{
dataGridView1.Rows.Clear();
//StreamReader sr = new StreamReader(f1.FileName, Encoding.GetEncoding(“GB2312”));
StreamReader sr = new StreamReader(f1.FileName, Encoding.GetEncoding(“gb2312”));
while (!sr.EndOfStream)//当前的流位置能否在流的末尾
{
string text = sr.ReadLine();
string[] item = text.Split(“,”);
int index = dataGridView1.Rows.Add();
{
OnLoadTextFile();
}
void OnLoadTextFile()
{
OpenFileDialog f1 = new OpenFileDialog();
f1.Title = “文件加载”;
f1.Filter = “文本文档(*.txt)|*.txt”;
if (f1.ShowDialog() == DialogResult.OK)
{
dataGridView1.Rows.Clear();
//StreamReader sr = new StreamReader(f1.FileName, Encoding.GetEncoding(“GB2312”));
StreamReader sr = new StreamReader(f1.FileName, Encoding.GetEncoding(“gb2312”));
while (!sr.EndOfStream)//当前的流位置能否在流的末尾
{
string text = sr.ReadLine();
string[] item = text.Split(“,”);
int index = dataGridView1.Rows.Add();
dataGridView1[0, index].Value = item[0].Trim();
dataGridView1[1, index].Value = item[1].Trim();
dataGridView1[2, index].Value = item[2].Trim();
dataGridView1[3, index].Value = item[3].Trim();
dataGridView1[4, index].Value = item[4].Trim();//索引超出了数组界限错误
}
sr.Close();
}
}
void OnLoadXmlFile()
{
}
本人小白,加载某个txt文本一直出现索引超出了数组界限错误,这是个BUG,还有中文乱码问题,求指导决办法,谢谢
解决方案
20
单步调试。
另外,不能保证不越界,就应该加index<Length。
40
乱码的话统一一下编码格式,gb2312 或UTF-8
20
判断一下
if(item .Length>5)
{
// 执行赋值语句
}、
另外这个datagridview 尽量不要这样赋值,
datagridview.DataSource 可以是 DataTable List<T> DataSet ……….好多形式的数据
你这样对某行某列赋值很容易出错,一点都不方便
if(item .Length>5)
{
// 执行赋值语句
}、
另外这个datagridview 尽量不要这样赋值,
datagridview.DataSource 可以是 DataTable List<T> DataSet ……….好多形式的数据
你这样对某行某列赋值很容易出错,一点都不方便
40
把
dataGridView1[0, index].Value = item[0].Trim();
dataGridView1[1, index].Value = item[1].Trim();
dataGridView1[2, index].Value = item[2].Trim();
dataGridView1[3, index].Value = item[3].Trim();
dataGridView1[4, index].Value = item[4].Trim();//索引超出了数组界限错误
改为
dataGridView1[0, index].Value = item[0].Trim();
dataGridView1[1, index].Value = item[1].Trim();
dataGridView1[2, index].Value = item[2].Trim();
dataGridView1[3, index].Value = item[3].Trim();
dataGridView1[4, index].Value = item[4].Trim();//索引超出了数组界限错误
改为
for(int i = 0; i < Math.Min(dataGridView1.ColumnCount, item.Length); i++) { dataGridView1[i, index].Value = item[i].Trim(); }
就可保证不会越界
至于乱码,你最好截个图上来看看