Reputation: 366
it may seem to be simple problem to many of you, but want i am trying to do is i am reading a text file on a click event using StreamReader
(ASP.net & C#) after reading that text file i am splitting each line with ',' delimiter and then each part of it i am storing in Datatable's
column and then binding the datatable to my gridview, my problem is i have written the code but i m getting empty gridview like this
Gridviews Column header i have created from designer with autogeneratecolumns="false"
my code is
protected void readfile_Click(object sender, EventArgs e)
{
string line;
DataTable dt = new DataTable();
using (StreamReader sr = new StreamReader(@"D:\Temp\fileread\readtext.txt"))
{
while ((line = sr.ReadLine()) != null)
{
string[] parts = line.Split(',');
dt.Rows.Add();
for (int i = 0; i < parts.Length; i++)
{
dt.Columns.Add();
dt.Rows[0][i] = parts[i];
MyGridView.DataSource = dt;
MyGridView.DataBind();
}
}
sr.Close();
}
my text file has data
1,1,4,2,"#",Description1
5,5,4,2,"#",Description2
3,3,6,3,"#",Description3
2,2,4,2,"#",Description4
4,5,4,2,"#",Description5
Hope you got it what i am trying to ask.
Upvotes: 3
Views: 12102
Reputation: 28355
DataColumn
outside the for
-loopDataRow
using DataTable.NewRow
methodYour code should be something like this:
DataTable dt = new DataTable();
dt.Columns.Add("Row No", typeof(Int32));
dt.Columns.Add("Col No", typeof(Int32));
dt.Columns.Add("Width", typeof(Int32));
dt.Columns.Add("Height", typeof(Int32));
dt.Columns.Add("ImageUrl", typeof(String));
dt.Columns.Add("Description", typeof(String));
using (StreamReader sr = new StreamReader(@"D:\Temp\fileread\readtext.txt"))
{
while ((line = sr.ReadLine()) != null)
{
string[] parts = line.Split(',');
var row = dt.NewRow();
for (int i = 0; i < parts.Length; i++)
{
row[i] = parts[i];
}
// important thing!
dt.Rows.Add(row);
}
sr.Close();
}
MyGridView.DataSource = dt;
MyGridView.DataBind();
Upvotes: 1
Reputation: 17049
How about something like this:
protected void readfile_Click(object sender, EventArgs e)
{
DataTable table = new DataTable();
table.Columns.Add("Row No.");
table.Columns.Add("Col No.");
table.Columns.Add("Width");
table.Columns.Add("Height");
table.Columns.Add("Image URL");
table.Columns.Add("Description");
using (StreamReader sr = new StreamReader(@"D:\Temp\fileread\readtext.txt"))
{
while (!sr.EndOfStream)
{
string[] parts = sr.ReadLine().Split(',');
table.Rows.Add(parts[0], parts[1], parts[2], parts[3], parts[4], parts[5]);
}
}
MyGridView.DataSource = table;
MyGridView.DataBind();
}
Upvotes: 2
Reputation: 27467
Add columns to datatable using code below
DataTable dt = new DataTable();
dt.Columns.Add("Row No", typeof(Int32));
dt.Columns.Add("Col No", typeof(Int32));
dt.Columns.Add("Width", typeof(Int32));
dt.Columns.Add("Height", typeof(Int32));
dt.Columns.Add("ImageUrl", typeof(String));
dt.Columns.Add("Description", typeof(String));
And bind datatable (dt) after you populate all rows in datatable, after while loop
using (StreamReader sr = new StreamReader(@"D:\Temp\fileread\readtext.txt"))
{
while ((line = sr.ReadLine()) != null)
{
string[] parts = line.Split(',');
var dr = dt.NewRow(); //use newrow to create new row
for (int i = 0; i < parts.Length; i++)
{
dr[i] = parts[i];
}
dt.Rows.Add(dr); //add row to datatable now
}
sr.Close();
}
//bind datatable to Gridview after we load file into dt
MyGridView.DataSource = dt;
MyGridView.DataBind();
Upvotes: 1