申し訳ありませんが、私はASP.NETについてかなり新しいですが、何が起こっているのか理解していると思います。私は彼らの中にレポートを作成する任務がありました。これまでのところ、この1つの問題を除いてすべてがダウンしています。ASPテーブルコントロールを表示/非表示にするにはどうすればよいですか? (それほど単純ではありません)
DataRowCollectionにデータバインドされたRepeaterを使用して、それを介してプログラムでテーブルを構築します。 、私の人生のために、私はできません
function displayDetailTable(tableID) {
var table = document.getElementById(tableID)
if (table.style.display == "none") {
table.style.display = "table";
}
else {
table.style.display = "none";
}
}
パスを:私は要素のIDと非表示になりますまたはテーブルを示しJavascriptの機能を持っている
Private Sub SubAcctGrid_OnItemDataBound(ByVal sender As Object, ByVal e As RepeaterItemEventArgs)
If e.Item.ItemType = ListItemType.AlternatingItem Or e.Item.ItemType = ListItemType.Item Then
Dim currentrow = TryCast(e.Item.DataItem, DataRow)
Dim acctSummaryTable = New Table With {.ID = "acctSummary" & e.Item.ItemIndex, .CssClass = "minisub_acct_table"}
Dim drillDownTable = New Table With {.ID = "drillDownTable" & e.Item.ItemIndex, .CssClass = "drilldown_table"}
' Build both tables here
acctSummaryTable.Rows(1).Cells(0).Attributes.Add("onclick", String.Format("displayDetailTable('{0}')", drillDownTable.ID))
acctSummaryTable.Rows(1).Cells(1).Attributes.Add("onclick", String.Format("displayDetailTable('{0}')", drillDownTable.ID))
e.Item.Controls.Add(acctSummaryTable)
e.Item.Controls.Add(drillDownTable)
End If
End Sub
:私はのようなものを持っていますしかし、正しい要素IDで。私が理解していることから、ASP.NETは一意性のために、私が割り当てたIDをいくつかの巨大なロングIDに変換します。たとえば、ID「drillDownTable0」のテーブルを割り当て、HTMLマークアップに 'ctl00_drillDownTable0'を吐き出します。それは初めてのことでしたが、Repeaterは新しい行にバインドされ、その後、「ctl01_drillDownTable0」などが表示されます。
私は上記のコードでセルに属性を追加するClientID、ID、およびUniqueIDを試しましたが、必要な処理を行っていません。
私はそのIDを取得してJavascript関数に渡す方法はありますか?または、私はより良い質問があると思います:いつIDが生成され、ページがHTMLでレンダリングされる前にそれらにアクセスできますか?
UniqueID、ID、およびClientIDの結果をデバッグ出力ウィンドウに出力すると、HTMLにあるIDではなく、テーブルに割り当てられたIDである「drillDownTable0」が表示されます。 Repeater自体はPage_Initで作成された動的コントロールです。それはそれと関係がありますか? – duraz0rz
@Duracell:ItemCreatedにテーブルを作成します。 DataItemにアクセスする必要がある場合は、ItemDataBoundのテーブルに入力することができます。 'FindControl(" drillDownTable "&e.Item.ItemIndex)'を使ってあなたのテーブルへの参照を取得してください。しかし、ItemCreatedで早く(ページのライフサイクルで)作成してください。とにかくClientIDを使用する必要があります。 ItemDataBoundに 'onclick'イベントを追加してください。 –
@Duracell:あなたは設定が複雑すぎ、エラーを起こしやすいです。なぜテーブルを動的に作成するのですか(そしてリピータも)? aspxで宣言的にそれらを作成できませんでしたか? –