2014-09-12 3 views
1

У меня есть считыватель данных для чтения строки из базы данных в этом формате 2014-07.Формат строки в RowDataBound

В строке запроса значения Я всегда строка 2014-07 и я использую метод форматирования строки, чтобы иметь на выходе июля 2014 в RowDataBound:

//In RowDataBound 
    if (!string.IsNullOrEmpty(Request.QueryString["Month"])) 
    { 
     e.Row.Cells[1].Text = string.Format(CultureInfo.CurrentCulture, "{0:MMMM yyyy}", 
              DataBinder.Eval(e.Row.DataItem, "Month")); 
    } 

Я использую этот код ниже создать новый ключ в моем C# приложения, основанный на строке 2014-07 или июля 2014:

Label Month = (Label)row.FindControl("Month"); 

//generate a new key 
DateTime dt; 
DateTime.TryParseExact(Month.Text.ToString(), "MMMM yyyy", 
       CultureInfo.CurrentCulture, DateTimeStyles.None, out dt); 

//Check "-" in string 
if (Month.Text.ToString().IndexOf("-") == -1) 
{ 
    string key = dt.ToString("yyyy-MM"); 
} 
else 
{ 
    string key = Month.Text.ToString(); 
} 

Если строка 2014-07 и не преобразовать значение 2014-07 к 2014 июля У меня есть правильный вывод:

2014-07 

Если строка преобразуется в RowDataBound в июле 2014 у меня есть неправильный вывод:

0001-01 

Это начинает заставлять меня думать, что моя структура в целом неверна.

Что мне не хватает?

Что не так с кодом?

Я был бы очень признателен за любую помощь, которую вы можете дать мне в решении этой проблемы.

Edit #1

Я попытался напечатает значение GridView при выходе июля 2014 и Ouput пуст, почему?

Label Month = (Label)row.FindControl("Month"); 

Response.Write(Month.Text.ToString()); 
Response.End(); 

Edit #2

код завершения ниже:

protected void sendValueOfMonth(object sender, EventArgs e) 
{ 
    DateTime d = DateTime.Now; 
    string key; 
    ImageButton ImgSend = (ImageButton)sender; 
    GridViewRow row = (GridViewRow)Lotto_A.NamingContainer; 
    Label Month = (Label)row.FindControl("Month"); 

    DateTime dt; 
    DateTime.TryParseExact(Month.Text.ToString(), "MMMM yyyy", 
        CultureInfo.CurrentCulture, DateTimeStyles.None, out dt); 

    //Check "-" in string 
    if (Month.Text.ToString().IndexOf("-") == -1) 
    { 
     key = dt.ToString("yyyy_MM"); 
    } 
    else 
    { 
     key = Month.Text.ToString(); 
    } 

    Response.Write(Month.Text.ToString() + "<br />"); 
    Response.Write(key.ToString()); 
} 


protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     ImageButton ImgSend = (ImageButton)e.Row.FindControl("ImgSend"); 
     Label Month = (Label)row.FindControl("Month"); 


     if (!string.IsNullOrEmpty(Request.QueryString["Month"])) 
     { 
      InitializeCulture(); 
      e.Row.Cells[1].Text = string.Format(CultureInfo.CurrentCulture, "{0:MMMM yyyy}", DataBinder.Eval(e.Row.DataItem, "Month")); 
     } 

    } 
} 


        <asp:TemplateField HeaderText="Send"> 
         <ItemTemplate> 
          <center> 
           <asp:ImageButton ID="ImgSend" runat="server" OnClick="sendValueOfMonth" /> 
          </center> 
         </ItemTemplate> 
        </asp:TemplateField> 

        <asp:TemplateField HeaderText="Month"> 
         <ItemTemplate> 
          <center> 
           <asp:Label ID="Month" runat="server" Text='<%# Eval("Month").ToString() %>'></asp:Label> 
          </center> 
         </ItemTemplate> 
        </asp:TemplateField> 
+0

Уход за разделом источника переднего конца также? – jomsk1e

+0

передний источник? код gridView? –

ответ

0

Вам не нужно делать что-нибудь еще из вашего кода позади. Попробуйте следующее:

<asp:Label ID="Month" runat="server" Text='<%# Bind("Month", "{0: yyyy-MM}").ToString() %>'></asp:Label> 
Смежные вопросы