1

GridView のサプライヤーと、表示される各製品の箇条書きリストを表示したいと考えています。

例えば:

Supplier One               Product A
                           Product B

Supplier Two               Product A
                           Product B
                           Product C

GridView は次のようになります。

        <asp:GridView 
            ID="GridView1" 
            runat="server" 
            AutoGenerateColumns="False" 
            CssClass="DataWebControlStyle">

            <HeaderStyle CssClass="HeaderStyle" />

            <AlternatingRowStyle CssClass="AlternatingRowStyle" />

            <Columns>
                <asp:BoundField 
                    DataField="CompanyName" 
                    HeaderText="Supplier" />

                <asp:TemplateField HeaderText="Products">
                    <ItemTemplate>
                        <asp:BulletedList 
                            ID="BulletedList1" 
                            runat="server" 
                            DataSource='<%#  %>'
                            DataTextField="ProductName">
                        </asp:BulletedList>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>

これは、データを GridView に読み込む分離コード ファイルです。

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    Dim suppliersAdapter As New SuppliersTableAdapter

    GridView1.DataSource = suppliersAdapter.GetSuppliers()
    GridView1.DataBind()
End Sub

製品も表示できるように、asp:BulletedList DataSouce に何を配置すればよいか教えていただけますか?

* アップデート *

助けてくれてありがとう。DataSource='<%# %>' 行を削除しました。コード ビハインド ファイルのヘルプに基づいて、現在配置されている追加の作業コーディングを次に示します。

私は ASP.Net を学んでいるので、コードに多くのコメントを追加して、何が起こっているのか、何が動いているのかを理解できるようにしました。コメントに間違いがあった場合は、コメントを調整してください。

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    ' TableAdapter object.
    ' Provide communication between this application and the database.
    '-----------------------------------------------------------------
    Dim suppliersAdapter As New SuppliersTableAdapter

    ' Get the data from the TableAdapter into the GridView.
    '------------------------------------------------------
    GridView1.DataSource = suppliersAdapter.GetSuppliers()

    ' Display the result set from the TableAdapter in the GridView.
    '--------------------------------------------------------------
    GridView1.DataBind()
End Sub

Protected Sub GridView1_RowDataBound(sender As Object, e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound

    ' A GridView has DataRows, EmptyDataRows, Footers, Headers, Pagers, and Separators.
    ' The DataSource will be assigned to the BulletedList in this GridView only when the RowType is a DataRow.
    ' This will make sure the "Object reference not set to an instance of an object" error will not be thrown.
    '---------------------------------------------------------------------------------------------------------
    If e.Row.RowType = DataControlRowType.DataRow Then

        ' TableAdapter object.
        ' Provide communication between this application and the database.
        '-----------------------------------------------------------------
        Dim productsAdapter As New ProductsTableAdapter

        ' BulletedList object.
        ' This object is created from the BulletedList control in the aspx file for GridView 
        ' so it can be used to assign a DataSource to the BulletedList.
        '------------------------------------------------------------------------------------
        Dim BulletedList1 As BulletedList = DirectCast(e.Row.FindControl("BulletedList1"), BulletedList)

        ' Get the SupplierID into a variable for use as a parameter for the GetProductsBySupplierID method of the TableAdapter.
        '----------------------------------------------------------------------------------------------------------------------
        Dim supplier = DataBinder.Eval(e.Row.DataItem, "SupplierID")

        ' Get the data from the TableAdapter into the GridView.
        '------------------------------------------------------
        BulletedList1.DataSource = productsAdapter.GetProductsBySupplierID(supplier)

        ' Display the result set from the TableAdapter in the GridView.
        '--------------------------------------------------------------
        BulletedList1.DataBind()
    End If
End Sub
4

2 に答える 2

1

リストごとに異なるデータ ソースがあります。

BulletedListグリッドのon RowDataBoundイベントにデータソースを設定することで、何を達成できますか。

次のようにイベント ハンドラーをアタッチRowDataBoundします。

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
   if (e.Row.RowType==DataControlRowType.DataRow) 
   {       
       BulletedList BulletedList1 = (BulletedList)e.Row.FindControl("BulletedList1"); 
       var supplier = DataBinder.Eval(e.Row.DataItem, "CompanyName");
       BulletedList1.DataSource = GetProductListForSupplier(supplier);
       BulletedList1.DataBind();
   }
}
于 2012-10-08T04:05:20.577 に答える
0

これを試して

  protected void GridView1_RowDataBound(Object sender, GridViewRowEventArgs e)
  {

    if(e.Row.RowType == DataControlRowType.DataRow)
    {
      // Display the company name in italics.
      string supplierName = e.Row.Cells[0].Text;
      //OR assuming you stored the SupplierID in hidden view - this can also be retrieved from GridView DataKeys value for each row
      string supplierID = ((HiddenField) e.Row.FindControl("hiddenFieldSupplierID")).Value;

      DataTable products = getProductsBySupplier(supplierID); //or by SupplierName
      BulletedList BulletedList1 = ((BulletedList) e.Row.FindControl("BulletedList1"))
      BulletedList1.DataSource = products;
      BulletedList1.DataBind()     

    }

  }
于 2012-10-08T04:04:27.080 に答える