日期:2014-05-19  浏览次数:20752 次

右键如何动态绑定数据库内容?
求助高手:C#2005,SQL2000   winfrom:程序
小弟想实现如下功能:在richTextBox点右键可以弹出菜单,该菜单的内容(只显示前10个汉字)为数据库里对应该richTextBox的内容。点击菜单后,该菜单对应的全部内容即可插入richTextBox光标处,同时右键关闭。
  如:数据库数据:
ID       CBM     CMC                     Ctype
1         A01     绑定数据           richTextBox1
2         A02     添加内容           richTextBox1
3         A03     学习绑定           richTextBox2
4         A04     增加内容           richTextBox2
当在第一个richTextBox1右击时,右键菜单出现ID1,ID2   数据,
当在第一个richTextBox2右击时,右键菜单出现ID3,ID4   数据。
谢谢



------解决方案--------------------
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();

//
//初始化table和RichTextBox
//
//ID CBM CMC Ctype
//1 A01 绑定数据 richTextBox1
//2 A02 添加内容 richTextBox1
//3 A03 学习绑定 richTextBox2
//4 A04 增加内容 richTextBox2

foreach (DataRow row in table.Rows)
{
string RichTextBoxID = row[ "Ctype "].ToString();
RichTextBox richTextBox = (RichTextBox)this.Controls[RichTextBoxID];
richTextBox.MouseClick += richTextBox1_MouseClick;
}
}

private void richTextBox1_MouseClick(object sender, MouseEventArgs e)
{
if ((e.Button & MouseButtons.Right) == MouseButtons.Right)
{
ContextMenu mu = (ContextMenu)myHT[sender];
if (mu==null)
{
mu = new ContextMenu();
DataRow[] Rows = table.Select( "Ctype= ' " + (sender as RichTextBox).Name + " ' ", "ID ASC ");
foreach (DataRow row in Rows)
{
MenuItem item = new MenuItem(string.Format( "{0} {1} ", row[ "CBM "], row[ "CMC "]).Substring(0,10));
item.Tag = sender;
item.Name = string.Format( "_{0}_menuItem ", row[ "ID "]);
item.Click += new EventHandler(item_Click);

mu.MenuItems.Add(item);
}

myHT.Add(sender, mu);
}
mu.Show((sender as RichTextBox), e.Location);
}
}

void item_Click(object sender, EventArgs e)
{
MenuItem item = (MenuItem)sender;
RichTextBox TextBox = (RichTextBox)item.Tag;
string ID = item.Name.Substring(1, item.Name.IndexOf( "_ ", 2));
DataRow row = table.Select( "ID= " + ID)[0];

//
//在这里插入菜单对应的内容
//
}

DataTable table = new DataTable();
Hashtable myHT = new Hashtable();