2010-07-16 2 views
0

기본적으로이 사진의 내용입니다. alt text http://a.imageshack.us/img20/9206/foldersrb.jpg데이터베이스에서 선택하여 항목의 아이콘을 만듭니다.

내가 treeview에서 무언가를 선택할 때 데이터베이스에서 데이터를 선택하는 linq 명령에 매개 변수를 전달합니다. 선택 항목의 모든 항목에 대해 항목을 폴더 또는 파일로 나타내는 아이콘과 텍스트를 만들고 싶습니다. 아이콘이나 링크를 누르면 트리 뷰를 푸시 할 때와 동일한 작업을 수행 할 수 있도록 데이터베이스에서 다시 선택하고 자리 표시자를 채우는 linq 명령에 매개 변수를 전달합니다.

내가 지금하고있는 방법은 ImageButton과 LinkButton을 보유하고있는 Panel을 runtima에서 만드는 것입니다. 그런 다음 Panel을 ContentPlaceHolder에 추가합니다. 이 문제는 내가 뭔가를 선택할 때마다 새로운 일을 할 수 없으며, 아이콘이나 링크 버튼을 누를 경우 트리 뷰에서만 작동합니다.

아이콘을 찾으려면 일부 컨트롤러와 CSS를 사용할 수 있습니까? 다른 더 좋은 방법이 있습니까?

이것은 기본적으로 Explorer에서 Windows에서 사용하는 것과 같은 시스템이며, Treeview는 폴더 만 표시하지만 창에는 폴더와 파일이 표시됩니다. 폴더를 열면 해당 폴더 안에있는 항목이 기본 창에 채워집니다. 파일을 클릭하면 편집기가 파일의 내용을 엽니 다.

답변

1

죄송합니다. 다른 답변으로 추가해야했습니다. 다음은 폴더 사용자 컨트롤의 간단한 샘플입니다.

컨트롤 만들기 ... 원하는 포맷.

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="FolderButton.ascx.cs" Inherits="FolderButton" %> 
<div> 
    <asp:ImageButton ID="btnImage" runat="server" ImageUrl="yourfolder.jpg" /> 
    <asp:LinkButton ID="btnTitle" runat="server" /> 
</div> 

속성을 추가하고 (이미지 및 링크 버튼을 클릭 할 때 클릭 이벤트를 해고하는 것을 잊지 마세요) 뒤에 코드에 이벤트를 클릭

public partial class FolderButton : System.Web.UI.UserControl 
{ 
    public int DatabaseId { get; set; } 
    public string Name { get; set;} // you can even set your linkbutton text here. 

    public event EventHandler Click; 
} 

는 FolderButton 컨트롤의 중계기 만들기

protected void rptFolders_ItemDataBound(object sender, RepeaterItemEventArgs e)   
{   
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)   
    {   
     Book book = (Book)e.Item.DataItem; //Or whatever your passing   

     FolderButton btnFolder = e.Item.FindControls("FolderButton1"); 

     btnFolder.Name=book.Name; 
     btnFolder.DatabaseId=book.Id; 

     btnFolder.Click += new EventHandler(FolderClicked);   
    }   
}  
: 데이터 바인딩에

<asp:Repeater ID="rptFolders" runat="server" OnItemDataBound="rptFolders_ItemDataBound"> 
      <ItemTemplate> 
       <uc1:FolderButton ID="FolderButton1" runat="server" /> 
      </ItemTemplate> 
     </asp:Repeater> 

설정 폴더 아이디

마지막으로 당신은 다음 이벤트를 클릭에서 원하는 whever 수행 할 수 있습니다

 void FolderClicked(object sender, EventArgs e) 
{ 
    int id = ((FolderButton)sender).DatabaseId; 

    /// Do something with your Id 
} 

아무것도 불분명 알려줘. 이것은 단지 빠른 프리 핸드 샘플이므로 오타 또는 나쁜 습관을 용서하십시오 ... 코드는 단지 demostration 목적만을위한 것입니다.

+0

좋아,이게 좋아 보인다. 그러나이 방법을 사용하면 각 페이지의 항목을 항상 다시 가져올 수 있습니까? 이제는 브레인 스토밍 만하고, 어쨌든 treeview와 아이콘보기에 대해 동일한 쿼리를 사용할 수 있습니까? 가상 XML 파일로 변환하고 바인딩하십시오. 아니면 그냥 데이터베이스에서 모든 것을 선택하고 세션에 저장하고 누군가가 파일을 바꿀 때까지 모든 것을 다시 선택할 때까지 사용해야합니다. – eski

+0

여기서 무엇을 얻고 있는지 잘 모르겠다. 전체 솔루션 전체를 알지 못한다. 요구 사항에 따라 다양한 옵션이 있습니다. 캐시, 세션, Sql 종속성 캐시 및 계속 켜져 있습니다. 이 모든 것은 데이터가 다른 요소 (사용자, 응용 프로그램 수준 데이터 등)간에 얼마나 많이 변경되는지에 따라 다릅니다. 여기에 너무 많은 요소가 있습니다. 새로운 질문을 시작하고 싶을 수도 있습니다. 알려줘. – CkH

2

내가 100 % 질문하는 것을 이해하지 못 하겠지만 나는 그 요지를 가지고 있다고 생각합니다.

폴더를 먼저 만든 다음 파일을 원한다고 가정합니다. 나는이 영역에 두 개의 중계기를 만들었는데, 하나는 폴더 이미지와 링크 버튼을, 다른 하나는 파일 이미지와 링크 버튼을위한 것이다.

linq 명령을 두 개의 쿼리, 하나는 폴더를 가져오고 하나는 파일로 만듭니다. 그런 다음 중계기를 해당 중계기에 바인딩하십시오. 뒤에 DataBind()를 호출 한 후

<asp:Repeater ID="rptFolders" runat="server" OnItemCommand="rptFolders_ItemDataBound"> 
    <ItemTemplate> 
     <div> 
      <asp:ImageButton ID="btnImage" runat="server" /> 
      <asp:LinkButton ID="btnLink" runat="server" /> 
     </div> 
    </ItemTemplate> 
</asp:Repeater> 

그리고 코드 : 여기

당신이 시작할 수 있도록 코드의 약간의

protected void rptFolders_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
    { 
     Book book = (Book)e.Item.DataItem; //Or whatever your passing 

     ImageButton btnImage = e.Item.FindControl("btnImage"); 
     LinkButton btnLink = e.Item.FindControl("btnLink"); 

     btnLink.Text = book.Name; 

     btnLink.Click += new EventHandler(FolderClicked); 
     btnImage.Click += new ImageClickEventHandler(FolderClicked); 
    } 
} 

당신은 분명히 당신이 클릭 이벤트와 함께 원하는대로 할 수있는, 단지 그 추가 안으로 좋은 측정을 위해.

아마 내가 폴더와 파일 컨트롤을 만들고 대신에 imagebutton/linkbutton 콤보를 사용하여 폴더/파일에 대한 자세한 정보를 저장하여 나중에 다른 ID를 얻기 위해 액세스 할 필요없이 저장할 수 있습니다. 또는 아닙니다. 그러나 이것에 대한 100 만 가지 접근법이 있습니다. 가장 좋다고 생각하는 것을 선택하십시오.

이 솔루션으로 더 많은 안내가 필요하거나 귀하의 질문을 이해할 수없는 경우 알려주십시오.

해피 코딩 ...

+0

예, 내 문제를 정확하게 이해했습니다. 내일이 코드를 사용해 볼게. 나는 이것이 지금 훨씬 더 좋은 방법이라고 생각한다. 당신이 말하는이 폴더 및 파일 컨트롤은 무엇입니까? 어떻게 내 솔루션에 구현할 수 있습니까? TreeView와 아이콘보기 모두에 사용할 수 있습니까? 내가 지금하고있는 방식은 기본적으로 동일한 데이터에 대한 두 번의 쿼리입니다. 하나는 treeview 용이고 다른 하나는 아이콘 용입니다. – eski

+0

폴더 및 이미지 컨트롤의 경우 원하는대로 형식이 지정된 imagebutton 및 linkbutton이 포함 된 사용자 지정 컨트롤을 각각 만듭니다. 원하는 경우 컨트롤에 다른 속성 (예 : ID)을 추가 할 수도 있습니다. 또는 전체 Book 객체를 컨트롤 안에 저장할 수도 있습니다. 그런 다음이 컨트롤을 리피터 안에두기 만하면됩니다. 더 많은 도움이 필요하다면 빠른 샘플을 만들려고 노력할 것입니다. – CkH

+0

나는 당신이 말하는 것에 대해 이해한다고 생각하지만 예제를 만들 수 있다면 정말 멋질 것입니다;) – eski

관련 문제