2011-12-19 2 views
1

내 코드에서 dataGridview에 바인드 된 DataTable이 있습니다.Datatable에서 DataRow의 열 값을 얻는 방법

데이터베이스에서 데이터를 가져올 때 gridview 잘 작동합니다. 그것은 데이터로 채운다. 내가하고 싶은 일은 지정된 행의 기본 키 값을 가져 오는 것입니다.

예 : 내가 원하는 무엇

PK   Address   Phone 
1   xxxyyyzzz...  1234567 
2   aaabbbccc...  2345678 

이입니다. 사용자는 행을 클릭 한 다음 버튼을 클릭하여 항목을 추가합니다. 그러면 PK 값을 얻고 다른 것들을 할 것입니다.

어떻게하면됩니까?

+0

참고 사항 : datarow의 인덱스는 특수한 경우에는 PK의 값이 아니지만 늦게 레코드를 삭제할 때 달라집니다 주문을 변경하십시오. ** 당신이 의미하는 바는 : "지정된 행"입니까? ** –

+0

데이터베이스에서 데이터를 선택할 때 데이터 테이블을 채우기 전에 pk 열을 선택하지 않았습니까? – Icarus

+0

@TimSchmelter 안녕하세요. 예, 알아둬야 할 것은 지정된 행의 PK 값입니다. –

답변

3

흠이 값을 얻는 방법과시기를 지정할 수 있습니까?

int index = dt.Rows.IndexOf(row); 

을하지만 그 점은 어떻게 될지 확실하지 않다, 이미 지정된 행이있는 경우, 왜 그냥 row[columnName]를 통해 PK를 얻을 수 없습니다

이 작업을 수행 할 수 있습니까?

그러나 이것은 for 루프를 반복하는 것보다 많은 리소스를 사용합니다.

DataGridView에 바인딩하기 전이나 후에 바인딩이 필요합니까? 다른 DataGridView 행에서 값을 가져와야하는 경우. 당신의 편집에 대한

:

당신 것 할 수 얻을과 같이 선택된 행 :

if (yourDataViewGrid.SelectedRows.Count == 1) 
{ 
Int pk = yourDataViewGrid.Rows[yourDataViewGrid.SelectedRows[0].Index].Cells["PK"].Value.ToString(); 
} 

당신이 행을 선택하는 체크 박스를 사용하는 것과 다른 방법으로 그 일을하는 경우, 이렇게하면 :

foreach (DataGridViewRow row in YourDataGridView.Rows) 
     { 

      if ((Boolean)((DataGridViewCheckBoxCell)row.Cells["CheckBoxName"]).FormattedValue) 
      { 
       Int pk = rows.Cells["PK"].Value.ToString(); 
      } 

     } 
+0

안녕하세요. DOTang. 예 질문을 변경했습니다. 예, datagridview에서 값을 가져와야합니다. –

+0

@Un_NatMenDim 제 대답이 업데이트되었습니다. – SventoryMang

+0

감사합니다. 잘 작동합니다 ... –

2

DataGridView 컨트롤은 DataView 클래스를 사용하여 DataTable에 바인딩됩니다. 당신은에 DataGridViewRow의 DataRow를 얻을 같은 것을 사용할 수 있습니다 (12) 당신이 찾고있는 인덱스가

var vrow = (DataRowView)grid.Rows[12].DataBoundItem; // get the bound object 
var drow = vrow.Row; // the Row property references the real DataRow 

. 때로는 DataSource 속성을 DataView에 명시 적으로 설정하고 양식에 대한 참조를 유지하는 것이 좋습니다. 보기도 데이터 정렬을 알 것입니다

관련 문제