0

たとえば、データベースに DateTime を文字列として持っています: 6@11@2012@1@37 私は次のようなデコード方法を持っています:

public static DateTime DecodeTime(string time)
        {
            int day = Int32.Parse(time.Split('@')[0].Trim());
            int month = Int32.Parse(time.Split('@')[1].Trim());
            int year = Int32.Parse(time.Split('@')[2].Trim());
            int hour = Int32.Parse(time.Split('@')[3].Trim());
            int minute = Int32.Parse(time.Split('@')[4].Trim());

            DateTime decode = new DateTime(year, month, day, hour, minute, 0);

            return decode;
        }

私がやろうとしているのは、次のようなデータセットに情報を入れようとすることです:

 public DataSet GetAllBooking()
        {
            string connString = ConfigurationManager.ConnectionStrings["SQL2012_892524_amritConnectionString"].ConnectionString;
            DataSet dataSet = new DataSet();
            // Create connection object
            //OleDbConnection oleConn = new OleDbConnection(connString);
            SqlConnection oleConn = new SqlConnection(connString);
             try
            {
                oleConn.Open();
                string sql = "SELECT TOP (50) Driver.FirstName + Driver.LastName AS DriverName, Booking.BookingId, Driver.CarId AS CarUsed, Booking.CreateDateTime AS BookingDateTime, Booking.Status FROM Booking INNER JOIN Customer ON Booking.CustomerId = Customer.CustomerId INNER JOIN Driver ON Booking.DriverId = Driver.DriverId ORDER BY Booking.BookingId DESC";
                SqlDataAdapter dataAdapter = new SqlDataAdapter(sql, oleConn);
                dataAdapter.Fill(dataSet, "Booking");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
            finally
            {
                oleConn.Close();
            }
            if (dataSet.Tables.Count <= 0)
                return null;
            else
                return dataSet;
        }

日付と時刻を文字列として保存するデータベースの列は CreationTime です。

DecodeTimeメソッドを呼び出してそれらの時間をSQLでエンコードし、それをグリッドビューに表示することは可能ですか?

ここに画像の説明を入力

4

2 に答える 2

2

String.Formatこれは、メソッドを使用して実現できます。

通常どおり GridView をデータ ソースにバインドし、次のようにマークアップでテンプレート列を宣言します。

<asp:TemplateField HeaderText="Date">
    <ItemTemplate>
        <%# String.Format("{2}/{1}/{0} {3}:{4}:00", 
                  Eval("ColName").Split('@') ) %>
    </ItemTemplate>
<asp:TemplateField>
于 2012-11-05T15:27:24.867 に答える
0

SqlDataAdapter/DataTable/DataColumn は、値をインターセプトしてその型を DateTime に変更するメカニズムを提供しません (何かをカスタム クラスに変換することしかできません)。最善の策は、SQL クエリで変換を行うことです (ただし、文字列関数はかなり制限されているため、クエリは非常に長くなります)。

もう 1 つのオプションは、新しい DateTime 列をテーブルに追加してから戻り、すべての行をトラバースしてメソッドを呼び出すことです。

if (dataSet.Tables.Count == 0)
    return null;

dataSet.Tables[0].Columns.Add(new DataColumn("CreationTime2", typeof(DateTime)));
foreach (var r in dataSet.Tables[0].Rows)
    r["CreationTime2"] = DecodeTime(r["CreationTime"]);

return dataSet;
于 2012-11-05T15:08:22.270 に答える