2017-10-24 1 views
-1

제 질문은 다른 질문과 다를 수 있습니다.DataRow에서 열 값을 가져옵니다.

그러나 DataRow에서 행의 값을 가져 오는 방법이 있습니까? 지금은 schemaInfos 얻을 수있는 다음 foreach 문이 들어 :

foreach (DataRow row in schemaTable.Rows 
{ 
    if (row.Field<String>("ColumnName") != "id") 
    { 
     TextBox textBox = new TextBox(); 
     MaterialDesignThemes.Wpf.HintAssist.SetHint(textBox, UppercaseFirst(row.Field<String>("ColumnName"))); 
     textBox.Name = row.Field<String>("ColumnName"); 
     textBox.Tag = row.Field<Boolean>("AllowDBNull"); 
     textBox.Text = // Here I want to put the value like row.Field<String>("ColumnValue") 
     StackPanel.Children.Add(textBox); 
    } 
} 

내 질문입니다 나도이 foreach 문을 통해 열의 값을 얻을 수 있습니까? 정상을 위해 나는 값을 얻기 위해, 다음을 수행해야합니다

while(reader.Read()) 
{ 
    textBox.Text = reader[i].ToString(); 
} 

을하지만 내가 너무 내 된 DataRow foreach 문에서이 작업을 수행 할 수 있다고 생각합니다. 어쩌면 다른 DataColumn 속성 값이 예를 들어 row.Field<String>("ColumnValue") 또는 smth 같은 것을 얻을 수 있습니다.

나는 또한 첫 번째 열의 값만 제공하고 다른 열의 값은 제공하지 않습니다.

using(MySqlCommand cmd = new MySqlCommand()) 
{ 
    cmd.Connection = connection; 
    cmd.CommandText = sql; 
    dataReader = cmd.ExecuteReader(CommandBehavior.KeyInfo); 
    schemaTable = dataReader.GetSchemaTable(); 
    int i = 1; 
    while(dataReader.Read()) 
    { 
     foreach(DataRow field in schemaTable.Rows) 
     { 
     if(field.Field<String>("ColumnName") != "id") 
     { 
      TextBox textBox = new TextBox(); 
      textBox.Name = field.Field<String>("ColumnName"); 
      textBox.Tag = field.Field<Boolean>("AllowDBNull"); 
      textBox.Text = dataReader[i].ToString(); 

      StackPanel.Children.Add(textBox); 
      i++; 
     } 
     } 
    } 

먼저 내가 사용하는 내 foreach 루프를 복사 :

int i = 1; 

foreach (DataRow field in schemaTable.Rows) 
{ 
    if (field.Field<String>("ColumnName") != "id") 
    { 
     TextBox textBox = new TextBox(); 
     MaterialDesignThemes.Wpf.HintAssist.SetHint(textBox, UppercaseFirst(field.Field<String>("ColumnName"))); 
     textBox.Name = field.Field<String>("ColumnName"); 
     textBox.Tag = field.Field<Boolean>("AllowDBNull"); 

     if (dataReader.Read()) 
     { 
      textBox.Text = dataReader[i].ToString(); 
     } 

     i++; 

StackPanel.Children.Add(textBox); 
    } 
} 
+0

_ "(ColumnValue") "예를 들어이 을 row.Field": 원하는 없습니다. 질문을 닫을 수 있습니까? –

+0

질문이 명확하지 않습니다. 데이터베이스의 테이블에 대한 메타 정보 만 포함하는 스키마 테이블이있는 것 같습니다. 값을 원하면 유효한 SQL을 사용하여 값을 읽은 다음 DataAdapter를 통해 DataTable을 채 웁니다. –

+0

것은 ("ColumnValue")가 없다는 것입니다. 그래요, columnName과 AllowDBNull을 얻기 위해 schemaInfo를 읽었습니다. ColumnName은 ColumnName의 Label이있는 TextBox입니다. 이제 Column의 값을 TextBox.Text 속성에 저장하려고합니다. 그것이 내가 할 수없는 이유입니다. (reader.Read()) 내 질문을 편집했습니다. – Luranis

답변

0

좋아 나는 내 문제를 해결하는 방법을 발견했다. 그리고이 코드와 유사한 제 질문에 편집 된 코드를 테스트했습니다. 그러나 다른 코드에서는 첫 번째 열의 값만 알려주었습니다. 그런 다음 Read()을 사용해야하기 때문에 작동하지 않는 if(dataReader.Read())을 제거하려고했습니다.

그래서 상단에 while(dataReader.Read())을 넣고 while 루프 안에 내 foreach 루프를 배치했습니다.

아니 내가 _ 그래 그거야

관련 문제