아마 Typed DataSet을 즐겨 쓰시는 분 중에 저랑 같은 문제를 겪으신 분이 몇몇 있으실줄로 아는데..


하나의 데이터셋에 릴레이션이 결린 데이터테이블이 여러개 일 경우 하나의 그리드뷰에 바인딩 해야할 때 고민되신적 없나요?(저만 그럴지도..ㅠㅠ)


예를 들면 이런거죠..


    protected void gvCompanyList_Init(object sender, EventArgs e)

    {

        DsTableAdapters.TB_CompanyTableAdapter adaptCompany = new DsTableAdapters.TB_CompanyTableAdapter();

        DsTableAdapters.TB_ProductTableAdapter adaptProduct = new DsTableAdapters.TB_ProductTableAdapter();

        Ds ds = new Ds();

        adaptCompany.Fill(ds.TB_Company);                      //회사정보 채우기

        adaptProduct.Fill(ds.TB_Product);                            //제품정보 채우기

        gvCompanyList.DataSource = ds.TB_Product;

        gvCompanyList.DataBind();

    }


위에서 DataSet에 TB_Company와 TB_Product가 Relation이 걸려 있어도 실제로 바인딩해보면 TB_Product만 바인딩 되게 됩니다..

그렇다고 저 테이블 두개 JOIN해서 가져오는 쿼리나 sp같은거 따로 만들기도 웃기는 상황.....


하지만 요로케...

//--------- *.cs

    protected string GetParentData(object dataItem, string name)

    {

        DataRowView drv = dataItem as DataRowView;

        return drv.Row.GetParentRow("FK_TB_Product_TB_Company")[name].ToString();     //DataSet에서의 릴레이션 이름

    }


//--------- *.aspx

<GridView ..........

<%# GetParentData(Container.DataItem, "CompanyName") %>    //부모테이블의 컬럼명

.......</GridView>

요로코롬 템플릿필드같은데서 써주면 마치 JOIN쿼리처럼 부모데이터에 접근 가능하지요..


반대로 GetChildRows 메소드 쓰시면 자식테이블에도 접근 가능합니다..

+ Recent posts