2013-01-20 3 views
0

linq을 사용하여 데이터베이스에서 조건을 평가해야 각 행의 확인란이 활성화되거나 비활성화됩니다. RowDataBound 또는 CreateRow 이벤트를 사용하여 수행 할 수 있다고 생각합니다.행을 gridview에서 조건으로 채우기

즉 linq의 데이터 소스로 채워지는 여러 열이있는 gridview가 있습니다. 이 열의 두 개 중 두 개가 각각 체크 박스를가집니다. 따라서 밑의 레코드가 1과 같은 경우 해당 행의 확인란이있는 column2 만 활성화되고, 둘 중 하나와 같지 않으면 column2가 그대로 유지됩니다.

답변

1

데이터 바인딩을 사용하여 샘플을 단순화 할 수 있도록 준비했습니다.

최초의 영문 코드, 내가 단일 레코드의 유효성을 검사 ValidateRecord을 사용한 통지 걸릴 :

<asp:GridView ID="GridView1" runat="server" DataKeyNames="Id" DataSourceID="ObjectDataSource1" AutoGenerateColumns="true"> 
     <Columns> 
      <asp:TemplateField HeaderText="Check"> 
       <ItemTemplate> 
        <asp:CheckBox ID="CheckBox1" runat="server" Enabled='<%# ValidateRecord(Eval("RowState")) %>' /> 
       </ItemTemplate> 
      </asp:TemplateField> 
     </Columns> 
    </asp:GridView> 
    <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetItems" TypeName="WebTester.DataGridTester"> 
    </asp:ObjectDataSource> 

이제 끝 뒤에 코드를. GetItems 일부 데모 데이터를 생성하는 데에만 사용됩니다, 요점은 ValidateRecord 내부 : enter image description here

첫 번째 행의 체크 박스가 활성화되어, 두 번째는 사용할 수 없습니다 :

public bool ValidateRecord(object value) 
    { 
     return (value as int?) == 1; 
    } 

    public static DataTable GetItems() 
    { 
     //generate some demo data... 
     DataTable dt = new DataTable(); 
     dt.Columns.Add("RowState", typeof(int?)); 
     dt.Columns.Add("Id",typeof(int)); 
     dt.Columns.Add("col1", typeof(string)); 
     dt.Columns.Add("col2", typeof(string)); 
     dt.Columns.Add("col3", typeof(string)); 
     dt.Columns.Add("col4", typeof(string)); 
     dt.Columns.Add("col5", typeof(string)); 
     dt.Columns.Add("col6", typeof(string)); 
     dt.Columns.Add("col7", typeof(string)); 
     dt.Rows.Add(new object[] {1, 1,"some","data","in","first","row", ".", ".." }); 
     dt.Rows.Add(new object[] {0, 2, "second", "record", "inside", "demo", "datatable", "-", "--" }); 
     return dt; 
    } 

그래서 최종 결과는 다음과 같이 표시됩니다.

해피 코딩!

+0

감사합니다. 답변이 매우 유용했습니다. – esteban

관련 문제