-1

以下のようなシナリオがあります。3 つのチェック ボックスがあります。それぞれに関連付けられた 3 つのテキスト ボックスがあります。テキスト ボックスに検索値を入力すると、グリッドに値が入力されます。このグリッドで行を選択すると、グリッドを非表示にする必要があり、選択した値 (1 つの列) が別のテキスト ボックスに入力されます。 .グリッドを非表示にするロジックを実装すると、「オブジェクト参照がオブジェクトのインスタンスに設定されていません。」というメッセージが表示されます。値、グリッドが非表示になります->このプロセスを2〜3回繰り返した後、チェックボックスを再度オンにするとエラーが発生します。上記のコントロールを含むマークアップを見つけてください。

<table width="500px">
       <tr>
           <td>
               <fieldset id="fssearch" runat="server">
                   <legend>Search </legend>
                   <table>
                       <tr>
                           <td>
                               <asp:CheckBox ID="CBFile" runat="server" Text="File No" OnCheckedChanged="CBFile_CheckedChanged"
                                   AutoPostBack="true" />
                           </td>
                           <td>
                               <asp:CheckBox ID="CBname" runat="server" Text="Patient Name" OnCheckedChanged="CBname_CheckedChanged"
                                   AutoPostBack="true" />
                           </td>
                           <td>
                               <asp:CheckBox ID="CBMobile" runat="server" Text="Mobile No" OnCheckedChanged="CBMobile_CheckedChanged"
                                   AutoPostBack="true" />
                           </td>
                       </tr>                    


                       <tr>                           
                           <td>
                            <asp:TextBox ID="RTFileS" onkeyup="KeyUp();" runat="server" OnTextChanged="RTFileS_TextChanged" Visible="false"></asp:TextBox>                                 
                           </td>
                           <td colspan="2">
                               <asp:TextBox ID="RTNameS" onkeyup="KeyUp();" runat="server" OnTextChanged="RTNameS_TextChanged" Visible="false"></asp:TextBox>                                 
                           </td>
                           <td>
                               <asp:TextBox ID="RTMobileS" onkeyup="KeyUp();" runat="server" OnTextChanged="RTMobileS_TextChanged" Visible="false"></asp:TextBox>                               
                           </td>                          
                       </tr>
                       <tr>
                           <td colspan="4">                                                                 
                               <telerik:RadGrid ID="gvPatientList" runat="server" AllowFilteringByColumn="True"
                                   AllowPaging="True" GridLines="None" OnSelectedIndexChanged="gvPatientList_SelectedIndexChanged" >
                                   <PagerStyle Mode="NextPrevAndNumeric" AlwaysVisible="true" />
                                   <GroupingSettings CaseSensitive="false" />
                                   <ItemStyle HorizontalAlign="Left" />
                                   <HeaderStyle HorizontalAlign="Left" />
                                   <AlternatingItemStyle HorizontalAlign="Left" />
                                   <ClientSettings EnablePostBackOnRowClick="true">
                                       <Selecting AllowRowSelect="true" />
                                   </ClientSettings>
                                   <MasterTableView AutoGenerateColumns="False" DataKeyNames="pt_regid">
                                       <CommandItemTemplate>
                                           <asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
                                       </CommandItemTemplate>
                                       <Columns>
                                           <telerik:GridBoundColumn HeaderText="Patient Name" UniqueName="pt_name" DataField="pt_name"
                                               AllowFiltering="false">
                                           </telerik:GridBoundColumn>
                                           <telerik:GridBoundColumn HeaderText="File No" UniqueName="pt_fileno" DataField="pt_fileno"
                                               AllowFiltering="false">
                                           </telerik:GridBoundColumn>
                                           <telerik:GridBoundColumn HeaderText="Mobile" UniqueName="pt_pmobileno" DataField="pt_pmobileno"
                                               AllowFiltering="false">
                                           </telerik:GridBoundColumn>
                                       </Columns>
                                   </MasterTableView>
                                   <HeaderContextMenu EnableImageSprites="True" CssClass="GridContextMenu GridContextMenu_Default">
                                   </HeaderContextMenu>
                               </telerik:RadGrid>                                   
                           </td>
                       </tr>
                   </table>
                   </fieldset>
           </td>
       </tr>
   </table>

グリッドで行を選択すると、名前の列の値がテキスト ボックスに入力され、以下のようにグリッドが非表示になります。

 protected void gvPatientList_SelectedIndexChanged(object sender, EventArgs e)
    {

        GridDataItem RegId = gvPatientList.SelectedItems[0] as GridDataItem;
         string regid = RegId.GetDataKeyValue("pt_regid").ToString();



        foreach (GridDataItem dataItem in gvPatientList.Items)
        {
            if (dataItem.Selected)
            {
                RCFName.Text = dataItem["pt_name"].Text;              
            }
        }
        gvPatientList.Visible = false;             

    }

上記のチェックボックスはラジオボタンのように機能し、同じためのjavascriptは以下のとおりです

  <script language="CS" runat="server">
        private void makeRadioGroupFromCheckBoxes(IEnumerable<CheckBox> checkBoxes)
        {
            StringBuilder sb = new StringBuilder();
            foreach (CheckBox cb in checkBoxes)
            {
                foreach (CheckBox innercb in checkBoxes)
                {
                    if (innercb != cb)
                    {
                        sb.Append("document.getElementById('");
                        sb.Append(innercb.ClientID);
                        sb.Append("').checked = false;");
                    }
                }
                cb.Attributes["onclick"] = "if(this.checked){" + sb.ToString() + "}else{this.checked = true;}";

                sb = new StringBuilder();
            }
        }      
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                this.makeRadioGroupFromCheckBoxes(new CheckBox[] { CBFile, CBname, CBMobile });              
            }
        }

textchanged イベントと 'onkeyup="KeyUp();' でグリッドが設定されます。以下のように関連付けられたテキストボックスの機能. aspx:

 <telerik:RadCodeBlock ID="RadCodeBlock1" runat="server">
        <script type="text/javascript">
            var timer = null;
            function KeyUp() {
                if (timer != null) {
                    clearTimeout(timer);
                }
                timer = setTimeout(LoadTable, 500);
            }
            function LoadTable() {
                $find("<%= RadAjaxManager1.ClientID %>").ajaxRequest("FilterGrid");
            }

        </script>
    </telerik:RadCodeBlock>

コードビハインド:

protected void RadAjaxManager1_AjaxRequest(object sender, Telerik.Web.UI.AjaxRequestEventArgs e)
   {
       if (e.Argument.IndexOf("FilterGrid") != -1)
       {
           gvPatientList.Rebind();
       }
   }

   protected void RTFileS_TextChanged(object sender, EventArgs e)
   {
       if (!string.IsNullOrEmpty(RTFileS.Text))
       {

           _scheduleService = new ScheduleService();
           clsSchedule clsschedule = new clsSchedule();
           string search = " where OldRegnNo like '" + RTFileS.Text + "%" + "'";
           gvPatientList.DataSource = _scheduleService.GetAllPatients(search);           
           gvPatientList.Rebind();
       }
   }

チェックボックスのチェックが変更されたイベントで、グリッドが表示されるようにしています。

 protected void CBFile_CheckedChanged(object sender, EventArgs e)
   {
       if (CBFile.Checked)
       {
           RTFileS.Visible = true;
           gvPatientList.Visible = true;
           gvPatientList.MasterTableView.Visible = true;
           gvPatientList.Rebind();

       }
       else
       {
           RTFileS.Visible = false;
       }
   }

Ajaxmanager は次のとおりです。

 <telerik:RadAjaxManager ID="RadAjaxManager1" runat="server" OnAjaxRequest="RadAjaxManager1_AjaxRequest">
       <AjaxSettings>
           <telerik:AjaxSetting AjaxControlID="gvPatientList">
               <UpdatedControls>
                   <telerik:AjaxUpdatedControl ControlID="gvPatientList" LoadingPanelID="RadAjaxLoadingPanel1" />
                   <telerik:AjaxUpdatedControl ControlID="RCFName" />                  
               </UpdatedControls>
           </telerik:AjaxSetting>
           <telerik:AjaxSetting AjaxControlID="RadAjaxManager1">
               <UpdatedControls>
                   <telerik:AjaxUpdatedControl ControlID="gvPatientList" LoadingPanelID="RadAjaxLoadingPanel1" />
               </UpdatedControls>
           </telerik:AjaxSetting>

グリッドを非表示/非表示にするとエラーが発生することを願っています。これについてのアイデアを提案してください。ありがとう、そうみゃ

4

1 に答える 1

0

以下のコード スニペットで試してください。false に表示されていたグリッドを ajaxify しようとすると、エラーが発生します。

protected void Page_PreRender(object sender, EventArgs e)
    {
        if (gvPatientList.Visible)
        {
            RadAjaxManager1.AjaxSettings.AddAjaxSetting(gvPatientList, gvPatientList, RadAjaxLoadingPanel1);
            RadAjaxManager1.AjaxSettings.AddAjaxSetting(gvPatientList, RCFName);
        }

    }
于 2012-08-24T18:22:09.990 に答える