เขียน code วนลูปยังไงอะคับให้มันโชว์ข้อมูลที่ import ทั้งหมด
คือตอนนี้ import ได้แล้วคับ แต่ว่าข้อมูลที่ import มันโชว์ไม่หมดคือมาแค่แถวเดียวเหมือนในรูปอะคับไม่ทราบว่าจะวนลูปได้ยังไงอะคับ
พอดีไม่เก่งเรื่องวนลูปคับ
Code (VB.NET)
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim ofd As New OpenFileDialog()
ofd.Filter = "All file(*.txt,*.scv)|*.txt;*.csv|Text files(*.txt)|*.txt|CSV (*.csv)|*.csv"
Dim _path As String = ""
Dim _filenname As String = ""
Dim dt As New DataTable
Dim dr As DataRow
dt.Columns.Add("1")
dt.Columns.Add("2")
dt.Columns.Add("3")
dt.Columns.Add("4")
dt.Columns.Add("5")
dt.Columns.Add("6")
dt.Columns.Add("7")
dt.Columns.Add("8")
dt.Columns.Add("9")
dt.Columns.Add("10")
dt.Columns.Add("11")
dt.Columns.Add("12")
dt.Columns.Add("13")
dt.Columns.Add("14")
dt.Columns.Add("15")
dt.Columns.Add("16")
dt.Columns.Add("17")
dt.Columns.Add("18")
dt.Columns.Add("19")
If ofd.ShowDialog() = DialogResult.OK Then
_path = Path.GetDirectoryName(ofd.FileName)
_filenname = Path.GetFileName(ofd.FileName)
Label1.Text = ofd.FileName
Dim conString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + _path + ";Extended Properties=""Text;HDR=no;FMT=Delimited"""
Dim strwer As New StreamReader(ofd.FileName)
Dim strLine As String = strwer.ReadLine()
If Trim(strLine) <> "" Then
dr = dt.NewRow
dr("1") = Split(strLine, "|")(0)
dr("2") = Split(strLine, "|")(1)
dr("3") = Split(strLine, "|")(2)
dr("4") = Split(strLine, "|")(3)
dr("5") = Split(strLine, "|")(4)
dr("6") = Split(strLine, "|")(5)
dr("7") = Split(strLine, "|")(6)
dr("8") = Split(strLine, "|")(7)
dr("9") = Split(strLine, "|")(8)
dr("10") = Split(strLine, "|")(10)
dr("11") = Split(strLine, "|")(11)
dr("12") = Split(strLine, "|")(13)
dr("13") = Split(strLine, "|")(16)
dr("14") = Split(strLine, "|")(17)
dr("15") = Split(strLine, "|")(24)
dr("16") = Split(strLine, "|")(25)
dr("17") = Split(strLine, "|")(26)
dr("18") = Split(strLine, "|")(27)
dr("19") = Split(strLine, "|")(28)
dt.Rows.Add(dr)
DataGridView1.DataSource = dt
End If
End If
End Sub
Tag : .NET, Win (Windows App)
Date :
2010-11-15 13:57:47
By :
xsodearna
View :
1550
Reply :
9
ตกลงจะใช้ ADO หรือว่าใช้การอ่านจาก Text File ครับ
Date :
2010-11-15 14:56:10
By :
webmaster
Code (VB.NET)
<%@ Import Namespace="System.Data"%>
<%@ Import Namespace="System.Data.OleDb"%>
<%@ Page Language="VB" %>
<script runat="server">
Sub Page_Load(sender As Object, e As EventArgs)
Dim dt As DataTable
'*** Csv to DataTable ***'
dt = CsvCreateDataTable()
'*** BindData to Repeater ***'
myRepeater.DataSource = dt
myRepeater.DataBind()
End Sub
'*** DataTable ***'
Function CsvCreateDataTable() As DataTable
Dim objConn As New OleDbConnection
Dim dtAdapter As OleDbDataAdapter
Dim dt As New DataTable
Dim strConnString As String
strConnString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="&Server.MapPath("csv/") & _
";Extended Properties='TEXT;HDR=Yes;FMT=Delimited;Format=Delimited(,)'"
objConn = New OleDbConnection(strConnString)
objConn.Open()
Dim strSQL As String
strSQL = "SELECT * FROM customer.csv"
dtAdapter = New OleDbDataAdapter(strSQL, objConn)
dtAdapter.Fill(dt)
dtAdapter = Nothing
objConn.Close()
objConn = Nothing
Return dt '*** Return DataTable ***'
End Function
</script>
<html>
<head>
<title>ThaiCreate.Com ASP.NET - CSV</title>
</head>
<body>
<form id="form1" runat="server">
<asp:Repeater id="myRepeater" runat="server">
<HeaderTemplate>
<table border="1">
<tr>
<th>CustomerID</th>
<th>Name</th>
<th>Email</th>
<th>CountryCode</th>
<th>Budget</th>
<th>Used</th>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td align="center"><%#Container.DataItem(0) %></td> <!--or <Container.DataItem("CustomerID") -->
<td><%#Container.DataItem(1) %></td> <!--or <Container.DataItem("Name") -->
<td><%#Container.DataItem(2) %></td> <!--or <Container.DataItem("Email") -->
<td align="center"><%#Container.DataItem(3) %></td> <!--or <Container.DataItem("CountryCode") -->
<td align="right"><%#Container.DataItem(4) %></td> <!--or <Container.DataItem("Budget") -->
<td align="right"><%#Container.DataItem(5) %></td> <!--or <Container.DataItem("Used") -->
</tr>
</ItemTemplate>
</asp:Repeater>
</form>
</body>
</html>
Go to : ASP.NET CSV and ADO.NET - System.Data.OleDb
Date :
2010-11-15 14:57:34
By :
webmaster
อ่านจาก text file คับ แต่ว่าถ้าเขียนแบบตัวอย่างมันเลือก text file แบบกำหนดชื่อตายตัวใช่ไหมคับ คือที่ต้องการคือ text file
จะต้อง ใช้ button เลือไฟล์ที่ต้องการ import อะคับ ผมกะไม่ค่อยเก่งหรืออาจเข้าใจไรผิดยังไงช่วยแนะนำหน่อยนะคับ
Date :
2010-11-15 15:05:05
By :
xsodearna
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim ofd As New OpenFileDialog()
ofd.Filter = "All file(*.txt,*.scv)|*.txt;*.csv|Text files(*.txt)|*.txt|CSV (*.csv)|*.csv"
Dim dt As New DataTable
Dim dr As DataRow
Label1.Text = ofd.FileName
dt.Columns.Add("1")
dt.Columns.Add("2")
dt.Columns.Add("3")
dt.Columns.Add("4")
dt.Columns.Add("5")
dt.Columns.Add("6")
dt.Columns.Add("7")
dt.Columns.Add("8")
dt.Columns.Add("9")
dt.Columns.Add("10")
dt.Columns.Add("11")
dt.Columns.Add("12")
dt.Columns.Add("13")
dt.Columns.Add("14")
dt.Columns.Add("15")
dt.Columns.Add("16")
dt.Columns.Add("17")
dt.Columns.Add("18")
dt.Columns.Add("19")
If ofd.ShowDialog() = DialogResult.OK Then
Dim strwer As New StreamReader(ofd.FileName)
Dim strLine As String = strwer.ReadLine()
If Trim(strLine) <> "" Then
dr = dt.NewRow
dr("1") = Split(strLine, "|")(0)
dr("2") = Split(strLine, "|")(1)
dr("3") = Split(strLine, "|")(2)
dr("4") = Split(strLine, "|")(3)
dr("5") = Split(strLine, "|")(4)
dr("6") = Split(strLine, "|")(5)
dr("7") = Split(strLine, "|")(6)
dr("8") = Split(strLine, "|")(7)
dr("9") = Split(strLine, "|")(8)
dr("10") = Split(strLine, "|")(10)
dr("11") = Split(strLine, "|")(11)
dr("12") = Split(strLine, "|")(13)
dr("13") = Split(strLine, "|")(16)
dr("14") = Split(strLine, "|")(17)
dr("15") = Split(strLine, "|")(24)
dr("16") = Split(strLine, "|")(25)
dr("17") = Split(strLine, "|")(26)
dr("18") = Split(strLine, "|")(27)
dr("19") = Split(strLine, "|")(28)
dt.Rows.Add(dr)
DataGridView1.DataSource = dt
End If
End If
End Sub
Date :
2010-11-15 15:40:14
By :
xsodearna
ความคิดเห็นที่ 4 นี่ก็ได้คับ ง่ายๆ แต่ใช้ได้เลย
Date :
2010-11-15 15:54:02
By :
inanosms
ความเห็นที่4ผมตอบเองคับ แต่มันโชว์แค่แถวเดียวไม่โชว์ทั้งหมดอะคับ
Date :
2010-11-15 16:00:25
By :
xsodearna
ลองใช้ คำสั่งนี้ดูครับ ไม่รู้จะช่วยได้ไหมน่ะครับ
Dim myReader As StreamReader
Dim CurrentLine As String
myReader = New StreamReader(GetFilename(), System.Text.UnicodeEncoding.Default)
While myReader.Peek <> -1
CurrentLine = myReader.ReadLine
end while
getfilename เป็นฟังก์ชั่นที่ผมเอาไว้ หาตำแหน่งไฟล์ คุณจะใส่ path ตรงๆ เลยก็ได้ครับ ชนิด string น่ะครับ *-*
currentline เป็นตัวแปรเอามารับค่าที่อ่านได้ ทีล่ะบรรทัด
myReader.Peek <> -1 เช็คว่าอ่านหมดรึยัง
ประวัติการแก้ไข 2010-11-15 16:13:36 2010-11-15 16:14:24
Date :
2010-11-15 16:12:28
By :
รามาตูม
ยังไม่ได้เลยคับ
Date :
2010-11-15 17:20:39
By :
xsodearna
หากข้อมูลเป็น TextFile การเรียกด้วย StreamReader เป็นวิธีที่ดีที่สุด
เมื่อได้ข้อมูลมาแล้ว ต้องดูโครงสร้างของข้อมูลนั้น ๆ แบ่ง Cell และ Row อย่างไร
หากแบ่งเป็นบรรทัด สามารถ ReadLine() ในการเรียกข้อมูลทีละบรรทัด และ
ใช้ Peek ในการตรวจสอบว่าข้อมูลหมดหรือยัง จากนั้นใช้ Aray มาแบ่งข้่อมูลให้เป็นเซลล์อึกครั้ง
ต่อไปนี้เป็นโค๊ดที่ผมแนะนำ หากมีข้อผิดพลาดที่ใดก็ให้โพสไว้ จะกลับมาดูอีกครั้ง
ป.ล. โค๊ดนี้ไม่ได้ผ่านการทดสอบรัน อาจมีข้อผิดพลาดได้
Code (VB.NET)
'วิธีสร้างตาราง
'การสร้าง Column ควรระบุประเภทของข้อมูลด้วย
'หากสามารถนำ For...Next มาใช้ได้ ควรนำมาใช้ จะทำให้โค๊ดสั้นลง
Dim dt As New DataTable
Dim dr As DataRow
For i As Integer = 1 To 19
dt.Columns.Add(i,GetType(System.String)
Next
'เรียกข้อมูลด้วย StreamReader ตามที่ท่านใช้อยู่
Dim strwer As New StreamReader("ofd.FileName")
'สร้างตัวแปรไว้รับข้อมูล
Dim strLine As String
Dim arCell() As String
'วนลูปเรียกข้อมูลออกจาก strwer
While strwer.Peek > -1
strLine = strwer.ReadLine()
arCell = strLine.Split("|"c)
dr = dt.NewRow
For i As Integer = 0 To arCell.Length - 1
dr(i) = arCell(i)
Next
dt.Rows.Add(dr)
End While
'สิ่งที่ต้องระวังคือ arCell มีจำนวนมากว่า Column ของตาราง จะ Error
Date :
2010-11-15 19:41:03
By :
base3000
Load balance : Server 02