我有一个数据表(两个DataTables,但我们只想象现在有一个)已经在窗口加载时声明了,这个DataTable填充了:
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上
答案 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表加载数据。
您可以轻松使用SqlConnection
和SqlDataAdapter
:
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();