Как отобразить данные нескольких столбцов в одном richtextbox в окнах форм C # - PullRequest
0 голосов
/ 24 сентября 2019

Я хочу отобразить несколько записей в одном richtextbox.Но не в обзоре данных.Просто в простом потоке со следующей строкой.Я пробовал этот код, он просто показывает записи из первого столбца.

cmd = new SqlCommand("SELECT phonetic,grammar, meaning, sentence FROM dictionaryTable WHERE word LIKE'" + this.WakhiWordRTB.Text.Trim() + "'", con);
con.Open();
SqlDataReader dr = cmd.ExecuteReader();
try {
    if (dr.Read())
    {
        EnglishMeningRTB.Text = dr.GetString('phonetic') & Environment.NewLine & 
        dr.GetString('grammar') & Environment.NewLine & dr.GetString('meaning') & 
        Environment.NewLine & dr.GetString('sentece') }
    else
    {
        EnglishMeningRTB.Text = "Sorry no such word found!! Try different word";
    }
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message);
}
finally
{
    dr.Close();
    con.Close();
}

1 Ответ

0 голосов
/ 24 сентября 2019

Вы, кажется, смешиваете SQL, vb.net и c # в этой строке:

EnglishMeningRTB.Text = dr.GetString('phonetic') & Environment.NewLine & 
       dr.GetString('grammar') & Environment.NewLine & dr.GetString('meaning') & 
         Environment.NewLine & dr.GetString('sentece') }

, и я удивлен вашим утверждением, что вы "получаете только первый символ", потому что это не должнодаже компилировать.Я ожидаю, что строка, которая задает ваш текст, будет выглядеть примерно так:

EnglishMeningRTB.Text = $"{dr.GetString(dr.GetOrdinal("phonetic"))}\r\n   {dr.GetString(dr.GetOrdinal("grammar"))}\r\n{dr.GetString(dr.GetOrdinal("meaning"))\r\n{dr.GetString(dr.GetOrdinal("sentece"))}";

Или это, если вы находитесь на pre c # 6:

EnglishMeningRTB.Text = string.Format(
  "{0}\r\n{1}\r\n{2}\r\n{3}",
  dr.GetString(dr.GetOrdinal("phonetic")),
  dr.GetString(dr.GetOrdinal("grammar")),
  dr.GetString(dr.GetOrdinal("meaning")),
  dr.GetString(dr.GetOrdinal("sentence"))
);

Я никогда не зналdatareader.GetString() принять строковое имя столбца;afaik это порядковый номер столбца целого числа, который нужно искать, используя GetOrdinal()

Если вы хотите отформатировать текст так, чтобы определение было выделено жирным шрифтом, грамматика курсивом и т. д., вам нужно отформатировать RTFтекст и установите свойство .Rtf вместо свойства .Text

В соответствии с моим комментарием выше, а также в дополнение к тому факту, что написание кода доступа к базе данных таким образом безобразно, как грех, я рекомендую вам хотя бы посмотретьв Dapper, если не EF.С Dapper ваш код может выглядеть так:

//make a strongly typed class to represent your dictionary entry
public class Definition{
  public string Phonetic {get; set;}
  public string Grammar {get; set;}
  public string Meaning {get; set;}
  public string Sentence {get; set;}
  public override ToString(){
    return $"{Phonetic}\r\n{Grammar}\r\n{Meaning}\r\n{Sentence}";
  }
}

//in your windows form, something like this gets your db entry, converts it to an instance of the Definiton class, disposes the connection etc:
using (var db = DapperConnectionFactory())
{
  var wordDef = db.QueryFirstOrDefault<Definition>("SELECT phonetic,grammar,meaning,sentence FROM dictionaryTable WHERE word LIKE @word", _wahkiWordRtb.Trim());

  EnglishMeningRTB.Text = wordDef?.ToString() ?? "Word not found";
}

Более приятный, безопасный, легкий для чтения и записи, более удобный для обслуживания, более быстрый ...

https://dapper учебник.сеть /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...