使用DataTable中的文本填充TextBox - 组合框

时间:2016-09-08 11:49:16

标签: c# mysql sql wpf

我有一个数据表(两个DataTables,但我们只想象现在有一个)已经在窗口加载时声明了,这个DataTable填充了:

  • NoteID
  • NoteName
  • 注意

NoteID:我的SQL数据库中的第一列提供了注释和ID

NoteName:我的SQL数据库中的第二列为注释提供名称

注意:这是第三个也是最后一个列,给出了注释的文本(可能很长,它是一个VarChar(MAX))

目前我的DataTable填充没有问题,但是我想填充我的TextBox(Named:textResult),其中“ Note ”列与组合框中选择的“NoteName”相关联。 / p>

//Setup connection to server
        SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
        builder.DataSource = "123.123.123.123";
        builder.InitialCatalog = "DiscoverThePlanet";
        builder.UserID = "TestPerm";
        builder.Password = "Test321";

        string connectionString = builder.ConnectionString;

        DataTable dtNotes = new DataTable();
        DataTable dtTemplateNotes = new DataTable();


        using (SqlConnection conn = new SqlConnection(connectionString))
        {
            conn.Open();

            SqlCommand cmdNotes = new SqlCommand("SELECT NoteID, NoteName, Note FROM Notes", conn);
            SqlCommand cmdTemplateNotes = new SqlCommand("SELECT TemplateNoteID, TemplateNoteName, TemplateNote FROM TemplateNotes", conn);

            SqlDataReader readerNotes = cmdNotes.ExecuteReader();

            dtNotes.Columns.Add("NoteID", typeof(string));
            dtNotes.Columns.Add("NoteName", typeof(string));
            dtNotes.Columns.Add("Note", typeof(string));
            dtNotes.Load(readerNotes);

            SqlDataReader readerTemplateNotes = cmdTemplateNotes.ExecuteReader();

            dtTemplateNotes.Columns.Add("TemplateNoteID", typeof(string));
            dtTemplateNotes.Columns.Add("TemplateNoteName", typeof(string));
            dtTemplateNotes.Columns.Add("TemplateNote", typeof(string));
            dtTemplateNotes.Load(readerTemplateNotes);

            // Temporary loop to see if the DataTable (dt) has any data?!?
            //foreach (DataRow thisRow in dt.Rows)
            //{
            //    MessageBox.Show(thisRow["NoteName"].ToString());
            //}

            // Define the columns BEFORE setting the item source
            noteNamesList.SelectedValuePath = "NoteID";
            noteNamesList.DisplayMemberPath = "NoteName";

            templateNoteNamesList.SelectedValuePath = "TemplateNoteID";
            templateNoteNamesList.DisplayMemberPath = "TemplateNoteName";

            // Set the ItemSource to my fully loaded data table!
            noteNamesList.ItemsSource = dtNotes.DefaultView;
            templateNoteNamesList.ItemsSource = dtTemplateNotes.DefaultView;

            //DEBUG START
            //MessageBox.Show("Hello");
            //DEBUG END

            conn.Close();
        }

就像说我必须使用不同的Drop Downs,但现在只使用名为“ dtNotes ”的那个

我对此很新,如果我尝试在我的代码中的任何地方引用“ dtNotes ”它找不到它?

我的 textResult XAML如果您需要它:

<TextBox x:Name="textResult" HorizontalAlignment="Left" Height="760" Margin="42,141,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="1494" AcceptsReturn="True" TextChanged="textResult_TextChanged" BorderBrush="#FF00A9CF" FontFamily="DengXian" FontSize="14.667" Background="#FFF3FFFE" Grid.ColumnSpan="2"/>

组合框,如果你需要它:

 <ComboBox x:Name="noteNamesList" HorizontalAlignment="Left" Height="28" Margin="42,101,0,0" VerticalAlignment="Top" Width="240" BorderBrush="White" Opacity="0.985" FontFamily="DengXian" FontSize="13.333"></ComboBox>

希望我能为您提供足够的信息,我们非常感谢您的帮助。

PS这是在WPF上

2 个答案:

答案 0 :(得分:1)

看起来您可能会将数据表声明为该方法的局部变量。

DataTable声明放在Namespace声明和类构造函数

之间的空格中
Namespace MyProject
{
    public sealed partial class MyClass : Page
    {
        //Class wide variables go here

        DataTable mytable = new DataTable();

        class MyClass()
        {

        }
    }
}

之后,您应该能够在DataTable事件中引用ComboBox.SelectionChanged来将您的值分配给TextBox

编辑:

ComboBox.SelectionChanged事件中使用

TextBox.Text = ComboBox.SelectedValue.ToString();

其中TextBox是要分配给的TextBox的名称,ComboBox是要从中获取值的ComboBox的名称。

或者,如果你喜欢它的第三个值,那么组合框不能直接处理

TextBox.Text = DataTable.Rows[ComboBox.SelectedIndex]["Note"].ToString()

答案 1 :(得分:1)

您使用复杂的代码从sql表加载数据。 您可以轻松使用SqlConnectionSqlDataAdapter

SqlConnection conn = new SqlConnection("Your Connection Settings");
string command="Select Note FROM Notes Where NoteName='" + comboNoteName.Text + "'";
SqlDataAdapter da = new SqlDataAdapter(command, conn);
DataTable dt = new DataTable();
da.Fill(dt);

由此,DataTable由数据和数据类型以及sql表填充。 现在,填写TextBox:

if(dt.Rows.Count>0)
   textResult.Text = dt.Rows[0]["Note"].ToString();

修改:

您也可以使用它: 您可以在Form_Load事件中填写一次DataTable,并在需要的地方经常使用它:

SqlConnection conn = new SqlConnection("Your Connection Settings");
string command="Select NoteId, NoteName, Note FROM Notes";
SqlDataAdapter da = new SqlDataAdapter(command, conn);
DataTable dt = new DataTable();
da.Fill(dt);

现在,在ComboBox_SelectedIndexChanged事件中输入:

if(dt.Rows.Count > 0)
    textResult.Text = dt.Select("NoteName='" + comboNoteName.Text + "'")[0]["Note"].ToString();