이것은 항상 나를 혼란스럽게 만들었습니다.이벤트 및 사용자 지정 서버 컨트롤에 대한 질문
맞춤 컨트롤 (이 경우에는 Datagrid 컨트롤의 자식)을 만들고 싶지만 마우스를 특정 셀 위로 가져 가면 롤오버 색상이 표시되도록하고 싶습니다. DataGrid에이 작업을 수행 할 수있는 조항이없는 경우 셀 관련 마우스 좌표를 가져온 다음 가장 가까운 셀을 강조 표시해야합니까?
덕분에
이것은 항상 나를 혼란스럽게 만들었습니다.이벤트 및 사용자 지정 서버 컨트롤에 대한 질문
맞춤 컨트롤 (이 경우에는 Datagrid 컨트롤의 자식)을 만들고 싶지만 마우스를 특정 셀 위로 가져 가면 롤오버 색상이 표시되도록하고 싶습니다. DataGrid에이 작업을 수행 할 수있는 조항이없는 경우 셀 관련 마우스 좌표를 가져온 다음 가장 가까운 셀을 강조 표시해야합니까?
덕분에
롤오버 색상은 스타일 시트 또는 자바 스크립트를 사용하여 정의해야합니다. 이것은 ASP.NET을 통해 직접 제어되지 않습니다. 서버 컨트롤이 마우스 오버 스타일을 정의하는 데 사용할 CSS 클래스를 생성하거나 인라인 JavaScript를 생성해야합니다.
CSS를 사용하는 것이 가장 좋지만 IE6에서는 작동하지 않습니다 (IE7에서는 기억이 안납니다). 이 예제에서는 컨트롤이 데이터 표를 HTML 표로 생성한다고 가정합니다. 귀하의 질문에 "사용자 지정 서버 컨트롤"이 나와 있기 때문에 다른 마크 업으로 컨트롤을 렌더링하는 경우에는 다를 수 있습니다. 표의 CSS 클래스가 MyDataGridClass
인지 확인하십시오. 당신은 전체 행을 선택하려면
.MyDataGridClass td:hover {
background: #999;
}
, 당신은 위의 예에서 td
tr
에를 변경합니다.
IE6에서 호버 스타일을 원한다면 하나의 셀만 강조 표시하면 각 셀 안에 <a />
태그를 사용하면 더 잘 수행 할 수 있습니다. IE6는 단지이 작동합니다 이유입니다, <a />
태그를 작동하지만 위의 6으로되지 않도록 잘못 가져가 의사 선택을 구현
.MyDataGridClass a {
display: block;
width: 100%;
height: 100%;
padding: 0px;
margin: 0px;
}
.MyDataGridClass a:hover {
background: #999;
}
이 예를 들어 당신이이 것을 물론, 가정 컨트롤이 배치 될 페이지에 CSS를 내장 할 수있는 기능. 어떤 이유로 든이 옵션이 없으면 자바 스크립트 경로를 사용할 수 있지만 이렇게하는 것이 바람직한 방법은 아닙니다. 자바 스크립트를 사용하는 방법에 관심이 있다면 알려 주시기 바랍니다.
업데이트 :
아래 섹션은 남긴 첫 번째 의견을 설명합니다. 누군가가 유용하다고 생각하면 원본을 보관했습니다.
IPostBackEventHandler
또는
IPostBackDataHandler
구현해야합니다. 이 두 인터페이스의 차이점을 이해해야 할 경우
see this question을 사용할 수 있습니다. 나는이 대답을 너무 오랫동안 만들 것이기 때문에 여기에 세부 사항을 포함시키지 않을 것이다.
이 예제에서는 IPostBackEventHandler
을 사용하지만 IPostBackDataHandler
은 꽤 비슷합니다.
당신은 다시 게시 이벤트를 처리하기 위해 몇 가지 작업을 수행해야합니다
base.Event
에 사용됩니다. 이 예제에서는 _EventClick
개체를 사용하고 있습니다.base.Events[]
으로 설정/등록하여 이벤트 가입자가 포스트 백간에 유지 관리되도록합니다.Page.ClientScript.GetPostBackEventReference
으로 전화하십시오. 그러면 ASP.NET의 __doPostBack
JavaScript 메서드에 대한 함수 호출이 생성됩니다. 렌더링하는 JavaScript 이벤트 속성에서이 스크립트를 사용할 수 있습니다.이것은 매우 간단한 ASP.NET LinkButton 컨트롤의 재 작성입니다. "마법"의 대부분은 AddAttributesToRender()
과 RaisePostBackEvent()
방법에서 발생합니다.
public class ControlWithEvent : WebControl, IPostBackEventHandler
{
private object _EventClick = new object();
protected override HtmlTextWriterTag TagKey
{
get { return HtmlTextWriterTag.A; }
}
public event EventHandler Click
{
add
{
base.Events.AddHandler(_EventClick, value);
}
remove
{
base.Events.RemoveHandler(_EventClick, value);
}
}
public void RaisePostBackEvent(string eventArgument)
{
// The value of the 'eventArgument' parameter will be "myOptions"
EventHandler handler = (EventHandler)base.Events[_EventClick];
if (handler != null)
{
handler(this, EventArgs.Empty);
}
}
protected override void AddAttributesToRender(HtmlTextWriter writer)
{
base.AddAttributesToRender(writer);
// "myOptions" can be anything, including an empty string.
// You can use it for your EventArgs object if you need it.
PostBackOptions options = new PostBackOptions(this, "myOptions");
string script = Page.ClientScript.GetPostBackEventReference(options, false);
writer.AddAttribute(HtmlTextWriterAttribute.Onclick, script);
}
public string Text { get; set; }
protected override void RenderContents(HtmlTextWriter output)
{
output.Write(Text);
}
}
당신이 당신의 컨트롤을 추가 자바 스크립트 로직을 포함 할 경우
, 난 당신이 ASP.NET으로 스크립트를 등록하는 방법을 볼 수 ASP.NET과 자바 스크립트를 포함에 this article을 읽으십시오.
감사합니다. 나는 너에게 다른 것을 보여줄 필요가 없을 것이다. js를 사용하여 특정 행/셀을 강조하는 방법에 대한 아이디어가 있습니다. 사용자 지정 컨트롤 및 이벤트에 대해 알아야 할 때이 질문을 던집니다 (좋은 링크를 알고 있다면 자유롭게 나열 할 수 있습니다). :). – dotnetdev
@dotnetdev 귀하의 의견에 따라 찾고 있다고 말한 것과 일치하도록 답변을 변경했습니다. 바라기를 이것은 당신이 찾고 있었던 것보다 더 많습니다. –
사실 두 답변 모두 매우 유용했습니다. 요약하면, DataGrid의 행이나 셀을 강조하는 가장 쉬운 방법은 필요한 스타일 (css가 스킨 등을 통해 컨트롤의 일부임을 보장)이있는 순수한 CSS를 통해서입니다. 이것은 본질적으로 귀하가 제공 한 첫 번째 방법입니다. – dotnetdev