Как отформатировать временную метку, чтобы показывать дату только в виде таблицы

#asp.net #gridview

#asp.net #просмотр сетки

Вопрос:

На странице aspx я привязываю метки следующим образом:

   <asp:TemplateField HeaderText="Date of Joining">
            <ItemTemplate>
                <asp:Label ID="Label6" runat="server" Text='<%# Eval("date_of_joining") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Paid Priviledge Date">
            <ItemTemplate>
                <asp:Label ID="Label8" runat="server" 
                    Text='<%# Eval("paid_priviledge_date") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
  

И в коде, лежащем в основе, я привязываю представление в виде таблицы следующим образом: (приведен минимальный код)

 GridView1.DataSource = dt2;
GridView1.DataBind();
  

Но столбцы gridview отображают дату следующим образом :

 4/12/2011 12:00:00 AM    
4/4/2011 12:00:00 AM
  

Пожалуйста, предложите, как удалить часть временной метки и отобразить только часть даты.

Я знаю, как это сделать, форматируя с помощью toString и SubString. Но я не могу сделать это в gridview.

Ответ №1:

Вы можете указать строки формата для инструкции eval:

 Eval("date_of_joining", "{0:dd/MM/yyyy}")
  

Комментарии:

1. Отлично, я искал именно такой супер полезный ответ. Большое спасибо, сэр

2. Я не хочу, чтобы это звучало как «я прав, а вы ошибаетесь», поскольку это абсолютно правильный ответ. Мой вопрос, однако… что происходит, когда вам нужно изменить форматирование даты? Просматриваете ли вы всю свою разметку, чтобы найти все экземпляры? Установив ее как кодовую функцию, вы можете изменить ее в одном месте, и она распространится на все экземпляры. DRY

3. Честно говоря, я виноват в том, что ввел первое, что работает, в ответ stackoverflow.

Ответ №2:

Создайте FormatDate метод в вашем codebehind и вызовите его из вашего gridview.
http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx
http://www.csharp-examples.net/string-format-datetime

Эта часть будет включена в ваш код после

 private object FormatDate(DateTime input)
{
    return String.Format("{0:MM/dd/yy}", input);
}
  

И этот бит войдет в вашу разметку

     <asp:TemplateField HeaderText="Date of Joining">
        <ItemTemplate>
            <asp:Label ID="Label6" runat="server" Text='<%# FormatDate(Eval("date_of_joining")) %>'></asp:Label>
        </ItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField HeaderText="Paid Priviledge Date">
        <ItemTemplate>
            <asp:Label ID="Label8" runat="server" 
                Text='<%# FormatDate(Eval("paid_priviledge_date")) %>'></asp:Label>
        </ItemTemplate>
    </asp:TemplateField>
  

Это то, что я бы назвал D.R.Y. подходом к проблеме. Если вам когда-нибудь понадобится каким-либо образом изменить форматирование. Вы можете просто отредактировать код, лежащий в основе метода, и он прольет приятную любовь на всю вашу разметку.

Комментарии:

1. Извините, сэр .. после стольких дней, когда я вернулся к этому решению, я обнаружил, что отметил ответ ilivewithian как наиболее подходящий .. но на самом деле ваш ответ самый эффективный. Теперь я отмечаю вашу дату как правильную. Извините за ошибку.

2. Если вы сделаете это в разметке, вы можете внести изменения без необходимости перекомпиляции.

3. @Chad, голосование против, потому что это не твое предпочтение, кажется мне немного странным. Существует несколько способов освежевать кошку, мой, оказывается, один из таких способов. Я предпочитаю НЕ делать этого в разметке, потому что мне нравится содержать ее в чистоте. Если вы не хотите перекомпилировать, задайте строку формата в App.config.

Ответ №3:

Используйте "{0:d}" для краткого формата даты. Попробуйте

  Text='<%# Eval("paid_priviledge_date","{0:d}") %>'
  

и

 Text='<%# Eval("date_of_joining", "{0:d}") %>'
  

Ответ №4:

Вы можете использовать DataFormatString в привязанном поле, то же самое можно задать, как показано ниже:

 <asp:Label ID="Label8" runat="server" Text='<%# Eval("paid_priviledge_date","{0:d}") %>'/>
  

Ответ №5:

 Text='<%# (Convert.ToDateTime((Eval("date_of_joining")))).ToShortDateString() %>'
  

Это самый простой способ, который я обнаружил.