Data_Binder()라는 하위의 Page_Load에 채워진 DataSet을 사용하여 4 세대 중첩 된 데이터 목록 (Parent, Child, GrandChild, GreatGrandChild)을 만들 수있었습니다. 데이터가 얼마나 빠르고 정확하게 표시되는지 매우 기쁩니다.중첩 데이터 목록 오류 편집
그러나 GreatGrandChild DataList의 Edit 버튼을 클릭하면 편집을 허용하지 않고 EditItemTemplate에 표시해야하는 정보가 완전히 사라집니다.
Jul 2013
Stat Forecast Sales Brand
100 116 Drop 80 %
Testing Insert
것은 당신이 무엇을 볼 수 있도록 내 GetChildRelation, Data_Binder 및 Edit_Command 서브 우퍼를 포함하고 있습니다 :
Jul 2013
Stat Forecast Sales Brand
100 116 Drop 80 %
Testing Insert
Part Number Mix DP Adj SP
8521150 30% 8 8 Edit
8521148 20% 5 5 Edit
8523458 10% 3 3 Edit
8524400 7% 2 2 Edit
8524276 6% 2 2 Edit
8523165 6% 2 2 Edit
8523985 5% 1 2 3 Edit
8523456 5% 1 1 Edit
8524403 4% 1 1 Edit
8524399 4% 1 1 Edit
8523987 3% 1 1 Edit
8524402 1% 0 0 Edit
클릭하면 편집이이 될 수 있습니다 : 이것은 초기 화면에서 모습입니다 트리거뿐만 아니라 내 GreatGrandChild 데이터 목록. 간결함을 위해 HeaderTemplate 및 ItemTemplate을 포함하지는 않습니다.
데이터를 표시하는 속도가 환상적이므로이 DataSet 메서드를 계속 사용하고 싶습니다.
제안 사항?
감사합니다,
강탈 GreatGrandChild이 컨테이너를 사용하여 데이터 소스를 통해 채워지 이후
중첩 된 DataList에 조각 ... BEHIND
<asp:DataList ID="DL_Supply_Plan_Date_Numbers_SP" runat="server"
CssClass="DP_DL_Supply_Plan_Date_Numbers_SP"
OnEditCommand="Edit_Command"
OnUpdateCommand="Update_Command"
OnCancelCommand="Cancel_Command"
DataSource='<%# GetChildRelation(Container.DataItem, "Fam_Date_GrandChild")%>'
>
<HeaderTemplate> ... </HeaderTemplate>
<ItemTemplate> ... </ItemTemplate>
<EditItemTemplate>
<asp:Label ID="lbl_dat_DP_Date_Numbers_hidden" runat="server" CssClass="hidden"
Text='<%#Container.DataItem("dat_DP_Date")%>' />
<asp:Label ID="lbl_txt_Part_Num_hidden" runat="server" CssClass="hidden"
Text='<%#Container.DataItem("txt_Part_Num")%>' />
<asp:Label ID="lbl_txt_Family_Part_Num" runat="server" CssClass="SP_Family_Member"
Text='<%#DataBinder.Eval(Container.DataItem,"txt_Family_Part_Num")%>' />
<asp:Label ID="lbl_num_Mix_Weight" runat="server" CssClass="SP_Family_Member SP_Mix"
Text='<%#DataBinder.Eval(Container.DataItem,"num_Mix_Weight","{0:0%}")%>' />
<asp:Label ID="lbl_DP_Unconstrained" runat="server" CssClass="SP_Family_Member SP_Mix DP"
Text='<%# Display_Supply_Plan(Eval("num_Mix_Weight"),Eval("num_DP_Number"),Eval("num_Brand_Number"),0) %>' />
<asp:TextBox ID="tbx_num_SP_Adjust" runat="server" CssClass="SP_Family_Member SP_Mix SP-Adjust"
Text='<%#DataBinder.Eval(Container.DataItem,"num_SP_Adjust")%>' />
<asp:Label ID="lbl_SP" runat="server" CssClass="SP_Family_Member SP_Mix SP"
Text='<%# Display_Supply_Plan(Eval("num_Mix_Weight"),Eval("num_DP_Number"),Eval("num_Brand_Number"),Eval("num_SP_Adjust")) %>' />
<br />
<asp:LinkButton ID="lnkUpdate" runat="server" CommandName="update">Update</asp:LinkButton>
<asp:LinkButton ID="lnkCancel" runat="server" CommandName="cancel">Cancel</asp:LinkButton>
</EditItemTemplate>
</asp:DataList>
CODE ...
Protected Function GetChildRelation(dataItem As Object, relation As String) As DataView
Dim drv As DataRowView = TryCast(dataItem, DataRowView)
If drv IsNot Nothing Then
Return drv.CreateChildView(relation)
Else
Return Nothing
End If
End Function
Sub Data_Binder()
Dim strConn As String = System.Configuration.ConfigurationManager.ConnectionStrings("TestConnectionString").ConnectionString
Dim Cat_Fam_Filter As String = "Where txt_Family_Category Like '" & ddl_Family_Category_Name.SelectedValue & "' " _
& "and txt_Family_Name Like '" & ddl_Family_Name.SelectedValue & "'"
Dim strSql As String = "SELECT * FROM tbl_Family " & Cat_Fam_Filter & " Order By txt_Family_Category, txt_Family_Name ; " _
& "SELECT * FROM func_Display_Demand_Plan() " & Cat_Fam_Filter & " Order by dat_DP_Date; " _
& "SELECT * FROM func_Display_Demand_Plan() " & Cat_Fam_Filter & " Order by dat_DP_Date; " _
& "SELECT * FROM func_Display_Supply_Plan() " & Cat_Fam_Filter & " " _
& "order by dat_DP_Date, num_Mix_Weight DESC "
Dim conn As New SqlConnection(strConn)
Dim da As New SqlDataAdapter(strSql, conn)
da.TableMappings.Add("Family1", "Dates")
da.TableMappings.Add("Family2", "Demand")
da.TableMappings.Add("Family3", "Supply")
_ds = New DataSet()
da.Fill(_ds, "Family")
_ds.Relations.Add("Fam_Date_Parent", _ds.Tables("Family").Columns("txt_Family_Name"), _ds.Tables("Dates").Columns("txt_Family_Name"))
_ds.Relations(0).Nested = True
_ds.Relations.Add("Fam_Date_Child", _ds.Tables("Dates").Columns("FamDateKey"), _ds.Tables("Demand").Columns("FamDateKey"))
_ds.Relations(1).Nested = True
_ds.Relations.Add("Fam_Date_GrandChild", _ds.Tables("Demand").Columns("FamDateKey"), _ds.Tables("Supply").Columns("FamDateKey"), False)
_ds.Relations(2).Nested = True
DL_Supply_Plan.DataSource = _ds.Tables("Family")
DL_Supply_Plan.DataBind()
End Sub
Sub Edit_Command(sender As Object, e As DataListCommandEventArgs)
Dim DL_Target As DataList = DirectCast(sender, DataList)
DL_Target.EditItemIndex = e.Item.ItemIndex
DL_Target.DataBind()
End Sub
업데이트 : 코드를 단계별로 실행 한 후 Edit_Command의 DL_Target.DataBind()가 예상대로 DL_Supply_Plan_Date_Numbers_SP로 이동한다는 것을 발견했습니다. 그러나 해당 DataList의 DataSource에는 GetChildRelation에 보낼 Container.DataItem이 필요합니다. 이 작업이 진행되면 아무 것도 없습니다. 데이터 소스 없음 ... 진행하지 마십시오 ... 코드 숨김에서 적절한 데이터 소스를 명시 적으로 만들 수 있습니까? 불행히도 DataRowViews에 대해서는 충분히 알지 못합니다. – AKDad