PDA

View Full Version : Scroll به نود جستجو شده در treeview



بهنام بهمنی
دوشنبه 10 تیر 1387, 10:16 صبح
با سلام
دوستان عزيز نحوه اسكرول كردن به نودي كه جستجو كرده ايم ، چطور مي باشد؟

منظورم اين است كه شما زماني كه يك نود را در treeview جستجو مي كنيم آن نود فعال مي شود اما اسكرول به ابتداي درخت منتقل مي شود ، اما ما مي خواهيم اسكرول به محل نود جستجو شده انتقال يابد.

با تشكر فراوان

بهنام بهمنی
سه شنبه 11 تیر 1387, 07:57 صبح
تابع scrollNodeIntoView ظاهرا اين كار را انجام مي دهد ، اما چگونه مي توان آنرا در هنگام تعويض نود فعال صدا كرد؟


function scrollNodeIntoView() {
var name = tvInfoDocs_Data.selectedNodeID.value;
var selectedNode = document.getElementById(name);
if (selectedNode == null) {
alert('selectednodeis null');
}
else {var tvDiv = document.getElementById('divScroll');
tvDiv.scrollTop = findPosY(selectedNode);
tvDiv.scrollLeft = findPosX(selectedNode);
}
}


function findPosX(obj) {
var curleft = 0;
if (obj.offsetParent) {
while (obj.offsetParent) {
curleft += obj.offsetLeft
obj = obj.offsetParent;
}
}
elseif (obj.x)
curleft += obj.x;
return curleft;
}
function findPosY(obj) {
var curtop = 0;
if (obj.offsetParent) {while (obj.offsetParent) {
curtop += obj.offsetTop
obj = obj.offsetParent;
}
}
else {if (obj.y) {
curtop += obj.y;
}
}
return curtop;
}

بهنام بهمنی
دوشنبه 17 تیر 1387, 10:11 صبح
موضوع ديگري كه امتحان كردم استفاده از expand از نود ريشه تا نود دلخواه است ، اين موضوع موجب باز شدن فقط شاخه مورد نظر مي شود اما اگر طول شاخه زياد باشد باز هم نود مورد نظر ما در صفحه نمي افتد.

sahab555
جمعه 15 بهمن 1389, 23:41 عصر
سلام
من هم به این مشکل برخورد کردم می خواستم ببینم راه حلی موجود هست

sahab555
چهارشنبه 20 بهمن 1389, 08:37 صبح
با کمک یه دوست خوب مشکلم حل شد:

TreeView در سمت کلاینت و در پنجره مرورگر به عنوان یک HTML Table در نظر گرفته میشه. و value نود انتخابی در واقع شماره اون Table Cell هست. به واقع اگه روی صفحه کلیک راست کنیم و روی گزینه view source کلیک کنیم در مورد نود انتخابی این مورد مشاهده میشه:


input type="hidden" name="myTree1_SelectedNode" id="myTree1_SelectedNode" value="myTree1t49"

حالا کاری که باید بکنیم اینه که نود رو مشخص کنیم و از متد scrollIntoView(true) در جاوا استفاده کنیم. من یه تابع به این ترتیب نوشتم که کد جاوا من رو تولید میکنه :



public string ChangeScrollTree(string TreeClientId,string PanelClientId)
{
string script;
script = "var elem = document.getElementById('"+TreeClientId+"_SelectedNode');";
script += "var node = document.getElementById(elem.value);";
script += "node.scrollIntoView(true);";
script += PanelClientId + ".scrollLeft = 0;";
return script;
}

و در رویداد SelectedNodeChanged کد زیر رو نوشتم


protected void myTree1_SelectedNodeChanged(object sender, EventArgs e)
{
ScriptManager.RegisterStartupScript(this.UpdatePan el1, typeof(string), "Script", ChangeScrollTree(myTree1.ClientID,pnlTree.ClientID ), true);
}