我正在从Excel工作表中读取数据并将其显示在数据网格视图中。在Excel中有一些日期列。当我从excel读取数据并将其绑定到dataGridView时。日期显示在格式“02/02/2009 12:00:00 AM”但excel列中的实际数据格式为“2/2/2009”。那么如何更改datagridview中的日期格式。
由于我绑定了数据集中的数据,我没有任何模板列或绑定列集,所以我不知道在哪里设置HtmlEncode =“False”DataFormatString =“{0:T}”
有没有办法做到这一点。请帮帮我。
请找到以下代码示例。
string OleDbConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= "+ FileUpload1.PostedFile.FileName + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\"";
string strSheetName = "Sheet1";
OleDbConnection oledbConnection;
OleDbCommand oledbCommand;
OleDbDataAdapter oledbAdapter;
oledbCommand = new OleDbCommand();
oledbAdapter = new OleDbDataAdapter();
DataSet dsExcellData = new DataSet();
oledbConnection = new OleDbConnection(OleDbConnection);
oledbConnection.Open();
oledbCommand.Connection = oledbConnection;
oledbCommand.CommandText = "Select * from [" + strSheetName + "$]"; // i want to find this sheet name
oledbAdapter.SelectCommand = oledbCommand;
oledbAdapter.Fill(dsExcellData);
oledbConnection.Close();
GridView1.DataSource = dsExcellData.Tables[0];
GridView1.DataBind();
=============================================== =========== 我试过了
dsExcellData.Tables [0] .Rows [rowcount] [“date_column”]。ToString()] = dsExcellData.Tables [0] .Rows [rowcount] [“date_column”]。ToString()]。ToString(“ d“);
但是该值未被指定为“mm / dd / yyyy”它也会再次占用默认时间(mm / dd / yyyy hh:mm:ss AM)。
=============================================== ==============
我只是将数据集分配给gridview。问题是数据集正在以mm / dd / yyyy hh:mm:ss AM格式读取日期列。我无法更改数据集中的数据
=============================================== ==============
最后我得到了ScottE的回答:
我们必须在datagridview的itemdatabound中添加以下代码:
protected void dgValidatedData_ItemDataBound1(object sender, DataGridItemEventArgs e)
{
for (int i = 0; i <= e.Item.Cells.Count - 1; i++)
{
System.DateTime cellDate = default(System.DateTime);
if (System.DateTime.TryParse(e.Item.Cells[i].Text, out cellDate))
{
e.Item.Cells[i].Text = string.Format("{0:d}", cellDate);
}
}
}
答案 0 :(得分:2)
如果你将它绑定为asp:BoundField,你需要将htmlencode设置为false。
<asp:BoundField HtmlEncode="false" DataField="Blah" DataFormatString="{0:d}" />
答案 1 :(得分:2)
好的,试试这个,其中“Item”是列名(可能是多个),这是一个需要格式化的日期。这当然是vb.net,但你可以解决这个问题。我确信有更好的方法,但这很有效。
Protected Sub gv_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs)
If e.Row.RowType = DataControlRowType.DataRow Then
For i As Integer = 0 To e.Row.Cells.Count - 1
If gv.HeaderRow.Cells(i).Text = "Item" Then
e.Row.Cells(i).Text = String.Format("{0:d}", CType(e.Row.Cells(i).Text, Date))
End If
Next
End If
End Sub
或者,如果您不知道哪些列具有日期,则以下内容也将起作用:
Protected Sub gv_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs)
If e.Row.RowType = DataControlRowType.DataRow Then
For i As Integer = 0 To e.Row.Cells.Count - 1
Dim cellDate As Date
If Date.TryParse(e.Row.Cells(i).Text, cellDate) Then
e.Row.Cells(i).Text = String.Format("{0:d}", cellDate)
End If
Next
End If
End Sub
答案 2 :(得分:0)
您应在GridView列中定义的日期格式。例如:
<asp:GridView>
...
<asp:TemplateField>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Eval("Date", "{0:T}") %>'></asp:Label>
</ItemTemplate>
...
</asp:GridView>
答案 3 :(得分:0)
以下是使用从GridView派生的自定义控件的解决方案:
using System;
using System.Collections;
using System.Web.UI.WebControls;
namespace CustomControls {
public class FormattedGridView : GridView {
protected override ICollection CreateColumns(PagedDataSource dataSource, bool useDataSource) {
// Call base method and return the collection as an ArrayList
var columns = (ArrayList) base.CreateColumns(dataSource, useDataSource);
for (var i = 0; i < columns.Count; i++) {
var agf = columns[i] as AutoGeneratedField;
if (agf != null && agf.DataType == typeof(DateTime)) {
// create a new column because the AutoGeneratedField does not support
// the modification of the DataFormatString property
var bf = new BoundField();
// copy some of the original properties
bf.DataField = agf.DataField;
bf.HeaderText = agf.HeaderText;
bf.HtmlEncode = false;
// set the format for the DateTime types
bf.DataFormatString = "{0:T}";
// replace the existing auto-generated colums
columns[i] = bf;
}
}
return columns;
}
}
}
答案 4 :(得分:0)
最后我得到了ScottE的回答:
我们必须在datagridview的itemdatabound中添加以下代码:
protected void dg_ItemDataBound1(object sender,DataGridItemEventArgs e) {
for (int i = 0; i <= e.Item.Cells.Count - 1; i++)
{
System.DateTime cellDate = default(System.DateTime);
if (System.DateTime.TryParse(e.Item.Cells[i].Text, out cellDate))
{
e.Item.Cells[i].Text = string.Format("{0:d}", cellDate);
}
}
}
但是上面的代码将检查绑定到datagrig的所有数据。它会尝试将数据解析为单元格中的日期时间。如果它是一个有效的日期时间,那么它会将数据转换为我们应用的格式。