1

我的意图是转换一个 int 表示的月份值(因为它在数据库表中)

将它(在 GridView 中显示)转换为字符串(月份名称)并将其作为 int 返回到数据库(转换回原始类型,int 表示的月份)。

这些是我的 GridView 中的相关元素,

<asp:GridView ID="GV_DaysPerMonth" runat="server" DataSourceID="dsWorkDayPerMonth" 
        AutoGenerateColumns="False" DataKeyNames="recordID" AllowPaging="True" 
        CellPadding="4" ForeColor="#333333" GridLines="None" Font-Names="arial" PageSize="12" 
        OnRowDataBound="GV_DaysPerMonth_RowDataBound"
        OnRowEditing="GV_DaysPerMonth_RowEditing"
        OnRowUpdating="GV_DaysPerMonth_RowUpdating">
    <AlternatingRowStyle BackColor="White" />
    <Columns>



                <asp:TemplateField HeaderText="חודש" ControlStyle-Width="100" HeaderStyle-Width="120" ItemStyle-HorizontalAlign="Center"> 
                    <ItemTemplate> 
                        <%# Eval("theMonth")%> 
                    </ItemTemplate> 
                    <EditItemTemplate> 
                        <asp:TextBox ID="TBX_theMonth" runat="server" Text='<%# Bind("theMonth")%>' /> 
                    </EditItemTemplate> 

<asp:GridView ID="GV_DaysPerMonth" runat="server" DataSourceID="dsWorkDayPerMonth" 
        AutoGenerateColumns="False" DataKeyNames="recordID" AllowPaging="True" 
        CellPadding="4" ForeColor="#333333" GridLines="None" Font-Names="arial" PageSize="12" 
        OnRowDataBound="GV_DaysPerMonth_RowDataBound"
        OnRowEditing="GV_DaysPerMonth_RowEditing"
        OnRowUpdating="GV_DaysPerMonth_RowUpdating">
    <AlternatingRowStyle BackColor="White" />
    <Columns>



                <asp:TemplateField HeaderText="Current Month" ControlStyle-Width="100" HeaderStyle-Width="120" ItemStyle-HorizontalAlign="Center"> 
                    <ItemTemplate> 
                        <%# Eval("theMonth")%> 
                    </ItemTemplate> 
                    <EditItemTemplate> 
                        <asp:TextBox ID="TBX_theMonth" runat="server" Text='<%# Bind("theMonth")%>' /> 
                    </EditItemTemplate> 

我正在使用这些 Helper 方法从代码后面

    public static CultureInfo ILci = CultureInfo.CreateSpecificCulture("he-IL");

    public static string GetMonthName(int mInt)
    {
        DateTime fullDate = new DateTime(2012, mInt, 2);
        string[] tempDayArray = fullDate.ToString("MMMM", ILci).Split(' ');
        return tempDayArray[0];
    }
    public static int GetMonthAsInt(string mStr)
    {
        return DateTime.ParseExact(mStr, "MMMM", ILci).Month;

为了完成这个简单的任务,但几乎没有错误,我想举一个例子来说明实现它的正确方法。我认为这很简单,原因是通过显示 int

<%# manipulation Function( Eval("columnName")) %>

会“正常工作”

但是当我用 Bind("columnName") 尝试它时,它对我来说太复杂了

我错误地假设值在 Cells[1] 中,而实际上它在 Cells[0] 中

所以我确实有它在正常模式和编辑模式下虽然不是可编辑但通过标签作为查看模式而不是文本框

protected void GV_DaysPerMonth_RowDataBound(object sender, GridViewRowEventArgs e)
{

    RowNum = GV_DaysPerMonth.Rows.Count;
    GridViewRow CurRow = e.Row;        // Retrieve the current row. 

    if (CurRow.RowType == DataControlRowType.DataRow)
    {
        bool isntEmptyMonth = string.IsNullOrEmpty(e.Row.Cells[0].Text) == false;
        if (isntEmptyMonth)
        {
            e.Row.Cells[1].Text = RobCS.RDates.GetMonthName(Convert.ToInt32((e.Row.Cells[0].Text)));
        }

    }
}


so i think it might be the **missing handler for the edit mode** ?
4

2 回答 2

2

这是从 int 中获取字符串 Month 名称的方法:

CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(1);

更多信息在这里:

在 c# 中将整数转换为月份名称的最佳方法?

要将月份编号转换为 sql server 中的月份名称,请看这里:

SQL中将月份数字转换为月份名称函数

- - 编辑

好的,在 RowDataBound 上,您需要将 int 转换为字符串,所以它类似于:

void CustomersGridView_RowDataBound(Object sender, GridViewRowEventArgs e)
{

   if(e.Row.RowType == DataControlRowType.DataRow)
   {
      // Display the month name. When you GridView is bound for the first time, you 
      // will bind the month number, which you can get in e.Row.Cells[1].Text. If 
     // Cells[1] does not work, try Cells[2], till you get the correct value. The 
     // convert the int to month name and assign it to the same Cell.
     e.Row.Cells[1].Text = GetMonthNameFromInt(e.Row.Cells[1].Text)

   }

}

在 Row_updating 上,您想再次将月份名称转换为 int,然后更新您的数据集(或保存到数据库)

protected void GridView_RowUpdating(object sender, GridViewUpdateEventArgs e)
{    

   //Update the values.
   GridViewRow row = GridView.Rows[e.RowIndex];
   var monthName = ((TextBox)(row.Cells[1].Controls[0])).Text;
   var monthNumber = GetMonthNumber(monthName);

  // code to update your dataset or database with month number 

  //Reset the edit index.
  GridView.EditIndex = -1;

  //Bind data to the GridView control.
  BindData();
}
于 2012-09-17T08:30:19.723 回答
1

页面类:

private static CultureInfo culture = CultureInfo.CreateSpecificCulture("he-IL");

public static string GetMonthName(string monthNum)
{
    return culture.DateTimeFormat.GetMonthName(Convert.ToInt32(monthNum));
}

网格视图:

    <ItemTemplate> 
        <%# GetMonthName(Eval("theMonth").ToString())%> 
    </ItemTemplate> 
    <EditItemTemplate>
        <asp:DropDownList ID="ddlMonth" runat="server" SelectedValue='<%# Bind("theMonth")%>'>
            <asp:ListItem Value="1" Text="תשרי"></ListItem>
               etc...
        </asp:DropDownList>
   </EditItemTemplate>

在您的 EditTemplate 中有一个带有 ListItems: value="1" Text="תשרי" 等的 DropDownList ,因此它是传递给您的数据层进行编辑的月份编号。

于 2012-09-17T08:48:18.057 回答