如果GridView(呈現爲表格)在div內,那麼div不能小於GridView。問題是調整大小的句柄被放置在與ResizeControlExtender關聯的JavaScript錯誤的地方。如果您沒有爲面板設置高度和寬度CSS樣式,就會發生這種情況。
下面的代碼已經過測試,工作正常:
Imports AjaxControlToolkit
Public Class Resizer
Inherits Panel
Private _resizeExtender As ResizableControlExtender
Private _grid As GridView
Private _contentContainer As Panel
Private Sub Resizer_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
_contentContainer = New Panel
_contentContainer.ID = Me.ClientID + "contentContainer"
_contentContainer.Style.Add("height", "50px")
_contentContainer.Style.Add("width", "50px")
_contentContainer.Style.Add("overflow", "auto")
_contentContainer.Style.Add("border", "solid 1px black")
_grid = New GridView
_grid.ID = Me.ClientID + "grid"
_grid.DataSource = CreateSource()
_grid.DataBind()
_contentContainer.Controls.Add(_grid)
_resizeExtender = New ResizableControlExtender
_resizeExtender.MinimumHeight = 50
_resizeExtender.ID = Me.ClientID + "resizeExtender"
_resizeExtender.HandleCssClass = "resizingImage"
_resizeExtender.TargetControlID = _contentContainer.ID
Me.Controls.Add(_contentContainer)
Me.Controls.Add(_resizeExtender)
End Sub
Private Function CreateSource() As DataView
Dim sourceTable As New DataTable
sourceTable.Columns.Add("column 1")
sourceTable.Columns.Add("column 2")
sourceTable.Columns.Add("column 3")
For i As Integer = 0 To 20
Dim row As DataRow = sourceTable.NewRow
row("column 1") = "col1 " + i.ToString
row("column 2") = "col2 " + i.ToString
row("column 3") = "col3 " + i.ToString
sourceTable.Rows.Add(row)
Next
Return New DataView(sourceTable)
End Function
End Class
爲了得到這個工作,我所做的就是添加一個樣式包含GridView控件的面板。該樣式設置初始高度和寬度,並將ResizeControlExtender正確放置在左下角。
JavaScript的我用於調整大小直接取出AjaxToolkit示例項目:
<script type="text/javascript">
function OnClientClickGrow() {
var rcp = $find('ResizableControlBehavior1');
var size = rcp.get_Size();
rcp.set_Size({ width: size.width * 2, height: size.height * 2 });
return false;
}
var fontSize = 12;
function OnClientResizeText(sender, eventArgs) {
// This sample code isn't very efficient, but demonstrates the idea well enough
var e = sender.get_element();
// Make the font bigger until it's too big
while ((e.scrollWidth <= e.clientWidth) || (e.scrollHeight <= e.clientHeight)) {
e.style.fontSize = (fontSize++) + 'pt';
}
var lastScrollWidth = -1;
var lastScrollHeight = -1;
// Make the font smaller until it's not too big - or the last change had no effect
// (for Opera where e.clientWidth and e.scrollWidth don't behave correctly)
while (((e.clientWidth < e.scrollWidth) || (e.clientHeight < e.scrollHeight)) &&
((Sys.Browser.agent !== Sys.Browser.Opera) || (e.scrollWidth != lastScrollWidth) || (e.scrollHeight != lastScrollHeight))) {
lastScrollWidth = e.scrollWidth;
lastScrollHeight = e.scrollHeight;
e.style.fontSize = (fontSize--) + 'pt';
}
}
</script>
-Frinny
我還沒有發現一個東西在AJAX控件工具包,實際工作正常或心不是臭蟲纏身 – 2009-07-20 11:03:04
嗯 - 謝謝安德魯 - 雖然它不是一個答案,但要記住。根據你所說的,我現在正在研究創建我自己的擴展器版本:)。感謝您的迴應。 – 2009-07-20 12:09:19