0

gridview はリピーターに配置され、itemdata バインドでエラーが表示されます

コード、

  <asp:Repeater ID="rptSearchResult" runat="server" 
                OnItemDataBound="rptSearchResult_ItemDataBound">
          <HeaderTemplate>
         <table border="0">
             <tr>
                 <td> Cost Page</td>
                 <td> Cost Page Description</td>
                 <td> Vendor Name</td>
                 <td> Bill Type</td>
             </tr>
      </HeaderTemplate>

      <ItemTemplate>
         <tr>
            <td> <%# Eval("CostPage")%></td>
               <td><%# Eval("CostPageDescription")%> </td>
               <td> <%# Eval("VendorName")%> </td>
               <td><%# Eval("BillType")%> </td>
         </tr>
           <tr>
            <td>
               <asp:GridView ID="gvDetails" runat="server" >
                   <Columns>  
                     <asp:TemplateField HeaderText="">
                     <ItemTemplate> 
                         <asp:CheckBox ID="chkSelect" runat="server" />
                     </ItemTemplate>
                    </asp:TemplateField>              
                     <asp:BoundField DataField="ItemId" HeaderText="Item ID"/>                    
                     <asp:BoundField DataField="ItemDescription"  HeaderText="Item Description"/>
                     <asp:BoundField DataField="BrandCode"   HeaderText="Brand Code"/>                    

                    </Columns> 

               </asp:GridView>  </td>
         </tr>
      </ItemTemplate>

      <FooterTemplate>
         </table>
      </FooterTemplate>

        </asp:Repeater>

.cs ファイルで、

    protected void rptSearchResult_ItemDataBound(
       object sender, RepeaterItemEventArgs e)
    {
        GridView gd = (GridView)e.Item.FindControl("gvDetails");


        details e1 = new details();
        e1.itemid= 1;
        e1.itemdesc = "item1";
        e1.brandcode = "BBB";

        List<details> employees = new List<details>();
        employees.Add(e1);

        gd.DataSource = employees;
        gd.DataBind();

}

4

2 に答える 2

2

gd特定の条件を実行するよりも、オブジェクトの天候が null であるかどうかを確認してください。したがって、コードは次のようになります。

GridView gd = (GridView)e.Item.FindControl("gvDetails");

if(gd != null) {
  gd.DataSource = employees;
  gd.DataBind();
}

編集:DataField="ItemDescription"の名前がasp:BoundField、データバインド時に指定したデータソースの従業員のプロパティと一致しない ため、エラーが発生しています。マークアップ コードは

<asp:BoundField DataField="itemdesc"  HeaderText="Item Description"/>                
于 2013-07-04T16:49:30.490 に答える
0

次のチェックを追加して問題を解決しました。

 if( (e.Item.ItemType == ListItemType.Item) || (e.Item.ItemType == ListItemType.AlternatingItem)) 
  {  
    //Non-null value for grid
  }

これで、gridview は null 以外の値になりました。

于 2013-07-05T13:18:20.983 に答える