0

上記のタイトルから、最初のpage_loadのコードは問題ありません。正しく表示されますが、ボタンをクリックして言語を変更すると、消えます(ヘッダーのみを表示)。私は約1週間かけて調べますが、それでも何が起こるかわかりません。表示されるデータが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_Dataます。GridView1つのメソッド内にバインドするための固有のコードを配置できます。

これで、コンテンツが変更された場合にのみ再バインドする必要があります。たとえば、ユーザーがレコード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グローバリゼーションの詳細については、アプリケーションで使用する言語ごとに1つのリソースファイルを作成する必要があることに注意してください) 。

グローバルリソースの使用

<!-- 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 に答える