2014-03-19 3 views
0

두 가지 양식이 있습니다. 하나는 MS Access의 데이터 원본과 함께 datagridview 컨트롤을 포함하고 있습니다. 데이터가 datagridview에 제대로 표시됩니다. 먼저 데이터 격자보기에서 셀을 선택한 다음 현재 선택한 셀의 행 인덱스를 가져옵니다. 접근 자 함수에서 행 인덱스를 사용합니다 (코드는 기본 형식입니다) :하나의 양식에서 다른 양식으로 데이터 읽기를 수행하는 C#

public String Name 
{ 
    get 
    { 
     return dataGridView1.Rows[selrow].Cells[1].Value.ToString(); 
    } 
} 

selrow에는 현재 선택된 셀의 행 인덱스가 포함되어 있습니다. 다음으로, "Edit record"버튼을 클릭하면 제 2 폼이 모달 폼으로 표시됩니다. 나는 텍스트 상자에 위의 접근의 값을 표시 할, 그래서 코드는 다음과 같이 간다 (코드 2 형태) :

private void EditRecord_Load(object sender, EventArgs e) 
{ 
    CashLoan main = new CashLoan(); 
    txtEName.Text = main.name; 
} 

하지만 실행 및 디버깅하려고 할 때,이 "인덱스를 얻을 수 범위를 벗어났습니다. 음수가 아니고 콜렉션의 크기보다 작아야합니다 매개 변수 이름 : index "내 접근 자 함수로 전달됩니다. 문제의 원인을 찾을 수없는 것 같습니다. 미리 감사드립니다.

+0

그런 다음 올바르게 현재 활성 셀의 인덱스를 저장하지 않는

는 생성자에 매개 변수로 EditRecord 형태로 값을 전달하십시오. – MoonKnight

답변

1

난 당신이 Editrecord의 텍스트 상자에 기본 폼에서 값을 표시하려면 이해한다면 형태. 그렇다면

Load 처리기에서 기본 폼 (CashLoan)의 새 인스턴스를 만듭니다.
그리고 빈 datagridview에서 값을 읽으려고합니다 (당신이 데이터 생성자로 데이터를 채우지 않는 것으로 가정합니다).
EditRecord 형태 :

private String _originalValue; 
public EditRecord(String originalValue) 
{ 
    _originalValue = originalValue; 
} 
//Then in Load handler 
private void EditRecord_Load(object sender, EventArgs e) 
{ 
    this.txtEName.Text = _originalValue; 
} 

//In main form 
EditRecord frm = new EditRecord(this.name); 
frm.ShowDialog(); 
+0

네, 저를 올바르게 이해하셨습니다. 고맙습니다! 이 솔루션은 저에게 효과적이었습니다. – Julienn

1

내가 현재 선택된 행의 인덱스에 문제가있는 것 같아요

public String Name 
{ 
    get 
    { 
     return dataGridView1.Rows[dataGridView1.CurrentCell.RowIndex].Cells[1].Value.ToString(); 
    } 
} 

원인을보십시오. 또한 행에 셀이 하나만있을 수도 있습니다. 이 경우 0 원인 지수와 1 시작 대신에 0 (그래서 0 = 1, 1 = 2 등)

dataGridView1.Rows[selrow].Cells[0].Value.ToString(); 
관련 문제