2010-02-13 3 views
1

오늘 이전에 DataGridView를 사용하여 개별 표시가 읽혀진 메시지를 인쇄하는 방법을 제안했습니다.WinForms DataGridView - 전체 텍스트 디스플레이 및 데이터 소스 업데이트

나는 약간의 조정 후에 다음과 같은 결과를 내 메시지 목록에 바인딩 할 수 있었다.

alt text http://img237.imageshack.us/img237/3015/datagridview.jpg

은 현재 내가이 문제가, 첫 번째는 내가 전체 메시지를 표시 할 수있는 행 높이의 크기를 조정하는 방법을 찾지 못했음을, 그리고 두 번째는 목록이 업데이트 될 때이다, DataGridView는 수정 내용을 표시하지 않습니다.

두 가지 문제를 해결할 수있는 방법은 없습니까? 아니면 내가 DataGridView 이외의 무언가를 사용해야합니까, 그리고 그 경우에는 무엇을 사용해야합니까?

또한 메시지에 포함 된 URL을 클릭 할 수있게하고 기본 브라우저에서 열 수있는 방법이 있습니까?

편집 바인딩과 관련된 추가 정보.

기본적으로 나는 폼 안에 클래스 변수가 있으며 단추로 초기 바인딩을 수행합니다.

private void button1_Click(object sender, EventArgs e) 
{ 
    list.Add(new Class1() { Message = "http://www.google.com/", Read = false }); 
    list.Add(new Class1() { Message = "Message way too long to fit in this small column width", Read = false }); 

    dataGridView1.DataSource = list; 
} 

그때 좀 더 많은 항목이 단지 그것을 테스트하기 위해 추가 다른 버튼이 있고, 내가 목록이 제대로 업데이트 알고 있지만, DataGridView에의 변경 사항이 없습니다.

EDIT 2

것은 내가 고정 할 수있는 폭이 필요하고, 긴 텍스트를 포함하는 셀의 높이가 확대되어 2 개 라인의 텍스트를 디스플레이 할 전에 명확하지 않으면

+0

C# DataGridView와 같은 것은 없습니다. .NET Windows Forms DataGridView를 의미합니다. C#은 프로그래밍 언어입니다. –

답변

0

나는 찔러보고 내가 도울 수 있는지 알아 보겠다.

먼저 행 높이에서. 내용에 맞게 행의 높이를 조정하는 AutoResizeRow 및 AutoResizeRows라는 두 개의 DataGridView 메서드가 있습니다.

DataViewGrid에 데이터를 바인딩하는 방법과 데이터를 수정하는 방법을 보여줄 수 있습니까? 업데이트하지 않는 수정에 도움이됩니다.

불행히도 이런 종류의 것을 기본적으로 처리하는 객체를 찾을 수없는 것 같습니다. DataGridView로 들어가는 텍스트가 링크인지 (먼저 나와있는 경우 정규 표현식을 사용하여) 먼저 결정해야합니다. 둘째, DataGridView에서 다르게 표시합니다 (밑줄을 그어 파란색으로 만듭니다). 셋째, 클릭 이벤트를 넣고 해당 셀을 클릭하면 브라우저에이를 던져서 처리합니다. 비록이 작업이 많은 것처럼 보이기 때문에 좀 더 자세히 살펴볼 것입니다. (그리고 나는 손가락질을 계속 지키고 누군가가 내가하는 것보다 더 잘 압니다.)

+0

초기 게시물에 더 많은 정보를 추가 했으므로 결론을 쉽게 내릴 수 있기를 바랍니다. AutoResizeRows를 DisplayedCells와 같은 다른 값으로 테스트했지만 어느 것도 높이 당 더 많은 줄로 텍스트를 분할하지 않았습니다 ... 내가 뭘 잘못하고있는 걸까요? – brokencoding

+0

불행히도 오늘 밤 좀 더보아야 할 것이지만 몇 가지 테스트를하고 내가 도움이되는지 확인합니다. 기다려서 미안해! –

+0

나는이 특별한 문제로 인해 내가 이미 두통을 앓고있을 때 도움을 기다리는 것이 마음에 들지 않습니다. – brokencoding

1

스마트 태그를 사용하여 EditColumn의 옵션을 선택 했습니까?

  • 당신이 유형 DataGridViewLinkColumn의 열을 추가 할 수는 열의 폭 및 height 속성에서 값을 제거하려고 메시지
  • 에 Text 속성을 설정합니다. 이 방법으로 데이터 크기에 따라 열 크기 (셀) 크기를 으로 설정합니다.

희망이 업데이트되지 목록에 대해서는

+0

DataGridViewLinkColumn으로 변경되었지만 모든 텍스트가 URL이 아닌 링크로 표시됩니다. 열 크기를 제거하려고하면 속성 값이 유효하지 않은 것으로 반환됩니다. EditColumn 옵션에서 내가 할 수있는 최선의 방법은 텍스트의 나머지 부분을 읽는 스크롤 막대를 얻는 것이었지만 다른 방법으로는 위틀 스크롤을 볼 수 없다는 것입니다. 고정 폭을 유지하고 나머지 텍스트를 여러 줄로 표시하는 옵션을 찾는 것 같습니다. – brokencoding

+0

이 기사를 확인하십시오. http://odetocode.com/Code/59.aspx –

+0

문제는 제가 열 너비의 크기를 조정하고 싶습니다. 너비가 고정되고 싶습니다. 포함 된 셀 높이입니다. 확대 할 긴 텍스트와 2 줄의 텍스트를 표시합니다. 이 작업을 완료 했습니까? – brokencoding

0

을하는 데 도움이; 두 가지 문제가 있습니다.

추가/제거를 확인하려면 목록 바인딩 이벤트가 필요합니다. 가장 쉬운 방법은 List<YourClass> 대신 BindingList<YourClass>을 사용하는 것입니다.

당신이 당신의 유형에 INotifyPropertyChanged를 구현해야합니다 (이 상황에서) 개별 속성에 대한 변경 사항을 통지 : 바인딩 보여주는 예를 들어

public class YourClass : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 
    private void OnPropertyChanged(string propertyName) 
    { 
     PropertyChangedEventHandler handler = PropertyChanged; 
     if (handler != null) 
     { 
      handler(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 
    private string message; 
    public string Message 
    { 
     get { return message; } 
     set { message = value; OnPropertyChanged("Message"); } 
    } 
    public bool isRead; 
    [DisplayName("Read")] 
    public bool IsRead 
    { 
     get { return isRead; } 
     set { isRead = value; OnPropertyChanged("IsRead"); } 
    } 
} 

그 목록에 : BTW

[STAThread] 
    static void Main() 
    { 
     Application.EnableVisualStyles(); 
     BindingList<YourClass> list = new BindingList<YourClass>(); 
     DataGridView grid = new DataGridView(); 
     grid.Dock = DockStyle.Fill; 
     grid.DataSource = list; 
     Button add = new Button(); 
     add.Text = "Add"; 
     add.Dock = DockStyle.Bottom; 
     add.Click += delegate 
     { 
      YourClass newObj = new YourClass(); 
      newObj.Message = DateTime.Now.ToShortTimeString(); 
      list.Add(newObj); 
     }; 
     Button edit = new Button(); 
     edit.Text = "Edit"; 
     edit.Dock = DockStyle.Bottom; 
     edit.Click += delegate 
     { 
      if (list.Count > 0) 
      { 
       list[0].Message = "Boo!"; 
       list[0].IsRead = !list[0].IsRead; 
      } 
     }; 
     Form form = new Form(); 
     form.Controls.Add(grid); 
     form.Controls.Add(add); 
     form.Controls.Add(edit); 
     Application.Run(form); 
    } 
+0

Thnx는 DataViewGrid가 업데이트되지 않는 문제를 해결했습니다. 행마다 여러 줄짜리 방법으로 전체 텍스트를 표시하는 방법을 알아낼 수 있다면 폭 스크롤바 대신 지금 막 주말을 즐기고있을 것입니다. – brokencoding

관련 문제