0

从上面的标题来看,我的代码在第一次page_load时没有问题,它显示正确,但是在我单击按钮更改语言后,它就消失了(只显示标题)。我花了大约一周的时间来找出答案,但仍然找不到发生了什么。如果可见数据大于 1,则其工作正常。

编辑:忘了把我的页面加载方法

    protected void Page_Load(object sender, EventArgs e)
    {
        NoResult.Visible = false;
        Get_Data();
    }

    protected void Get_Data()
    {

        DBCAD.Service1 myCADDB = new DBCAD.Service1();
        myCADDB.UseDefaultCredentials = true;
        string result = "";
        //set web service proxy
        if (!GlobalVariable_CCCNS.filterOrNot)
        {
            //invoke web service method
            result = myCADDB.CallCardStatus_Filter_CCCNSEMBILAN_ALL();
        }
        else
        {
            GlobalVariable_CCCNS.FilterDC = DropDownList1.SelectedValue;
            //invoke web service method
            if (GlobalVariable_CCCNS.FilterDC == "CCC NS ALL")
            {
                result = myCADDB.CallCardStatus_Filter_CCCNSEMBILAN_ALL();
             }
            else
            {                  
                result = myCADDB.CallCardStatus_Filter(GlobalVariable_CCCNS.FilterDC);
            }
        }

        //read the response data and put in xml document
        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.LoadXml(result);
        string mypath = Server.MapPath(@"Data.xml");

        //XmlTextReader reader = new XmlTextReader ("DBCAD.xml");
        xmlDoc.Save(mypath);

        //set the data set
        DataSet ds = new DataSet();

        ds.ReadXml(mypath);

        //Open hidden column
        CallCardStatus.Columns[0].Visible = true;

        if (ds.Tables.Count > 0)
        {
            //list out the result to Data Grid
            CallCardStatus.DataSource = ds;
            CallCardStatus.DataBind();
        }
        else
        {
            NoResult.Visible = true;
        }

        //Clear Unwanted Column
        CallCardStatus.Columns[0].Visible = false;
  }

这是我的 RowDataBound

    string lastRow = "";
    protected void CallCardStatus_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        //Many item with same id but different status, I just want to visible and get the first row for each id.
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            var thisRow = e.Row;

            if (thisRow.Cells[0].Text == lastRow)
            {
                e.Row.Visible = false;
            }
            lastRow = thisRow.Cells[0].Text;
        }
    }

这是我的马来语和英语单选按钮

    protected void RadioButtonList1_SelectedIndexChanged(object sender, EventArgs e)
    {
        GlobalVariable_CCCNS.cultureName = RadioButtonList1.SelectedValue.ToString();

        Page.Culture = GlobalVariable_CCCNS.cultureName;
        Page.UICulture = GlobalVariable_CCCNS.cultureName;
        if (GlobalVariable_CCCNS.cultureName == "ms-MY")
        {
            Label2.Visible = false;
            Label2.Text = "Kawalan Status Kad Panggilan";
            Label2.Visible = true;
        }
        else
        {
            Label2.Visible = false;
            Label2.Text = "CallCard Status Monitoring";
            Label2.Visible = true;
        }

        Page_Render();
    }


    protected void Page_Render()
    {
        Page.Culture = GlobalVariable_CCCNS.cultureName;
        Page.UICulture = GlobalVariable_CCCNS.cultureName;
        ALL.Text = GetLocalResourceObject("ALLResource1.Text").ToString();
        Label1.Text = GetLocalResourceObject("Label1Resource1.Text").ToString();
        NoResult.Text = GetLocalResourceObject("NoResultResource1.Text").ToString();

        DBCAD.Service1 myCADDB = new DBCAD.Service1();
        myCADDB.UseDefaultCredentials = true;
        string result = "";
        //set web service proxy
        if (!GlobalVariable_CCCNS.filterOrNot)
        {
            //invoke web service method
            result = myCADDB.CallCardStatus_Filter_CCCNSEMBILAN_ALL();
        }
        else
        {
            GlobalVariable_CCCNS.FilterDC = DropDownList1.SelectedValue;
            //invoke web service method

            if (GlobalVariable_CCCNS.FilterDC == "CCC NS ALL"){
                    result = myCADDB.CallCardStatus_Filter_CCCNSEMBILAN_ALL();
            }else{
                    //invoke web service method
                    result = myCADDB.CallCardStatus_Filter(GlobalVariable_CCCNS.FilterDC);
            }
        }

        //read the response data and put in xml document
        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.LoadXml(result);
        string mypath = Server.MapPath(@"Data.xml");

        //XmlTextReader reader = new XmlTextReader ("DBCAD.xml");
        xmlDoc.Save(mypath);

        //set the data set
        DataSet ds = new DataSet();

        ds.ReadXml(mypath);
        // CallCardStatus.DataSource = ds;
        //CallCardStatus.DataBind();

        //Open hidden column
        CallCardStatus.Columns[0].Visible = true;

        if (ds.Tables.Count > 0)
        {
            //list out the result to Data Grid
            CallCardStatus.DataSource = ds;
            CallCardStatus.Columns[2].HeaderText = GetLocalResourceObject("ButtonFieldResource1.Text").ToString();
            CallCardStatus.Columns[3].HeaderText = GetLocalResourceObject("BoundFieldResource3.HeaderText").ToString();
            CallCardStatus.Columns[4].HeaderText = GetLocalResourceObject("BoundFieldResource4.HeaderText").ToString();
            CallCardStatus.Columns[5].HeaderText = GetLocalResourceObject("BoundFieldResource5.HeaderText").ToString();
            CallCardStatus.Columns[6].HeaderText = GetLocalResourceObject("BoundFieldResource6.HeaderText").ToString();
            CallCardStatus.Columns[7].HeaderText = GetLocalResourceObject("BoundFieldResource7.HeaderText").ToString();
            CallCardStatus.Columns[8].HeaderText = GetLocalResourceObject("BoundFieldResource8.HeaderText").ToString();
            CallCardStatus.Columns[9].HeaderText = GetLocalResourceObject("BoundFieldResource9.HeaderText").ToString();
            CallCardStatus.DataBind();
        }
        else
        {
            NoResult.Visible = true;
        }

        //Clear Unwanted Column
        CallCardStatus.Columns[0].Visible = false;
     }

任何人都可以帮忙吗?谢谢..Siti..:)

4

1 回答 1

1

为了稍微清理您的遗留代码,我建议您执行以下操作:(清理代码将帮助您更轻松地发现错误)

绑定你的GridView

绑定数据绑定控件的最佳实践是在Page_Load事件内部:

protected void Page_Load(object sender, EventArgs e)
{
     if (!this.IsPostBack)
     {
         // in this method u will bind your GridView
         this.BindGrid();
     }
}

除非我遗漏了什么,否则方法中的代码Page_Render用于呈现您的GridView,并且该代码在方法中重复Get_DataGridView您可以将特定的代码放置在一个方法中以绑定您的内部。

现在您只需要在其内容发生更改时重新绑定您GridView的内容,例如,如果您允许您的用户编辑您的GridView记录。否则,您不应重新绑定它。(这是真的,只要你的页面有EnableViewState="true"

可以将用于本地化GridView列的代码移至GridVew.DataBound事件中。或者更好的是,将视图本地化的逻辑委托给您的标记,为此,您可以在GridView.

例子:

    <asp:GridView runat="server" DataSourceID="lds" ID="gv"
        AutoGenerateColumns="false"
    >
        <Columns>
            <asp:TemplateField>
                <HeaderTemplate>
                    <asp:Label Text="<%$ Resources: your_resource_file_name_without_extension, your resource_key %>" runat="server" />
                </HeaderTemplate>
                <ItemTemplate>
                    <asp:Label ID="a_meaningfull_name" Text='<%# Eval("your_field_name") %>' runat="server" />
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>

设置页面语言覆盖Page.InitializeCulture方法:

注意你只需要在这个方法里面设置this.UICulture = culture;this.Culture = culture;

protected override void InitializeCulture()
{
    // you have to call Request.Form, because at this point in the page life cycle, the page viewstate has not been loaded yet
    var culture = this.Request.Form["RadioButtonList1"];

    if (!string.IsNullOrWhiteSpace(culture))
    {
        // if the values of your list are culture specific (ie. en-US, es-MX, etc) you can uncomment the following line
        // this.Culture = culture;
        this.UICulture = culture;
        base.InitializeCulture();
    }
}

使用这种方法,您不需要该RadioButtonList1_SelectedIndexChanged事件。您在此事件中放置的代码将不是必需的。

这段代码:

    if (GlobalVariable_CCCNS.cultureName == "ms-MY")
    {
        Label2.Visible = false;
        Label2.Text = "Kawalan Status Kad Panggilan";
        Label2.Visible = true;
    }
    else
    {
        Label2.Visible = false;
        Label2.Text = "CallCard Status Monitoring";
        Label2.Visible = true;
    }

可以使用标记轻松消除:(请注意,您需要为要在应用程序中使用的每种语言创建一个资源文件,要了解有关 ASP.Net 全球化的更多信息,请单击此处

使用全球资源

<!-- Assuming global resources -->
<asp:Label runat="server" ID="Label2" Text="<%$ Resources: your_resource_file_name_without_extension, your_resource_key %>"  />

您的全局资源文件如下所示:

  <data name="your_resource_key" xml:space="preserve">
    <value>your text</value>
  </data>

使用本地资源

<!-- Assuming local implicit resources -->
<asp:Label runat="server" ID="Label2" meta:resourcekey="base_name_of_your_resource_key" Text="default value used to render the control at design time in VS" />

在这种情况下,您的本地资源文件如下所示:

  <data name="base_name_of_your_resource_key.Text" xml:space="preserve">
    <value>your text</value>
  </data>

您无需Page_Render();RadioButtonList1_SelectedIndexChanged活动中致电

于 2012-08-10T05:03:45.310 回答