C# 通过listview和textbox sql server compact 4更新数据
我已经做了一个数据库应用程序。目前我有一个添加和删除功能,但现在我正在搜索更新功能的帮助。我已经在这个网站上搜索了所有的答案,但我想没有运气。所以我想要的是,如果我在ListView中单击一条记录,它会自动显示在文本框中,这样我就可以更改内容,当我单击“更新”按钮时,它必须更新该记录 非常感谢您的帮助 我的表格代码1C# 通过listview和textbox sql server compact 4更新数据,c#,database,listview,C#,Database,Listview,我已经做了一个数据库应用程序。目前我有一个添加和删除功能,但现在我正在搜索更新功能的帮助。我已经在这个网站上搜索了所有的答案,但我想没有运气。所以我想要的是,如果我在ListView中单击一条记录,它会自动显示在文本框中,这样我就可以更改内容,当我单击“更新”按钮时,它必须更新该记录 非常感谢您的帮助 我的表格代码1 public SqlCeConnection conn = new SqlCeConnection(@"Data Source=E:\Users\Ali\Docum
public SqlCeConnection conn = new SqlCeConnection(@"Data Source=E:\Users\Ali\Documents\automail.sdf");
////////////////////////////////////Methodes////////////////////////////////////
private void Populate()
{
SqlCeCommand cm = new SqlCeCommand("SELECT * FROM Emails ORDER BY principalID", conn);
listView1.Items.Clear();
try
{
SqlCeDataReader dr = cm.ExecuteReader();
while (dr.Read())
{
ListViewItem it = new ListViewItem(dr["principalID"].ToString());
it.SubItems.Add(dr["email"].ToString());
it.SubItems.Add(dr["query"].ToString());
it.SubItems.Add(dr["subject"].ToString());
listView1.Items.Add(it);
}
dr.Close();
dr.Dispose();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
Application.ExitThread();
}
}
////////////////////////////////////Methodes////////////////////////////////////
// Insert button (for data insert)
private void button1_Click(object sender, EventArgs e)
{
if (textBox1.Text == "" || textBox2.Text == "" || textBox3.Text == "")
{
MessageBox.Show("Fill in all the information first!");
}
else
{
SqlCeCommand cmd = new SqlCeCommand("INSERT INTO Emails(principalID, email, query, subject) VALUES(@principalID, @email, @query, @subject)", conn);
cmd.Connection = conn;
cmd.Parameters.AddWithValue("@principalID", textBox1.Text);
cmd.Parameters.AddWithValue("@query", textBox2.Text);
cmd.Parameters.AddWithValue("@email", textBox3.Text);
cmd.Parameters.AddWithValue("@subject", textBox4.Text);
try
{
int affectedrows = cmd.ExecuteNonQuery();
if (affectedrows > 0)
{
Populate();
MessageBox.Show("Email added successfully!");
}
else
{
MessageBox.Show("Failed to add email!");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
//if form shown update listview
private void Form1_Shown(object sender, EventArgs e)
{
try
{
conn.Open();
Populate();
}
catch (SqlCeException ex)
{
MessageBox.Show(ex.Message);
Application.ExitThread();
}
}
//open form 2 and hide this
private void button2_Click(object sender, EventArgs e)
{
this.Hide();
Form2 form2 = new Form2();
form2.Show();
}
private void Form1_Load(object sender, EventArgs e)
{
}
//if listview selected enable button, else disable
private void listView1_SelectedIndexChanged(object sender, EventArgs e)
{
if (listView1.SelectedItems.Count > 0)
{
button3.Enabled = true;
}
else
{
button3.Enabled = false;
}
}
private void button3_Click(object sender, EventArgs e)
{
}
//delete record button
private void button3_Click_1(object sender, EventArgs e)
{
if (listView1.SelectedItems.Count <= 0)
{
MessageBox.Show("Select a record!");
}
else
{
for (int i = 0; i < listView1.SelectedItems.Count; i++)
{
SqlCeCommand cm = new SqlCeCommand("DELETE FROM Emails WHERE principalID = @principalID", conn);
cm.Parameters.AddWithValue("@principalID", listView1.SelectedItems[0].Text);
try
{
cm.ExecuteNonQuery();
Populate();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
}
private void button2_Click_1(object sender, EventArgs e)
{
if (listView1.SelectedItems.Count > 0)
{
ListViewItem itm = listView1.SelectedItems[0];
string principalid = itm.SubItems[0].Text;
string query = itm.SubItems[1].Text;
string email = itm.SubItems[2].Text;
Form2 form2 = new Form2();
form2.Show();
form2.PrincipalID = principalid;
form2.Query = query;
form2.Email = email;
}
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
}
}
public SqlCeConnection conn=new SqlCeConnection(@“数据源=E:\Users\Ali\Documents\automail.sdf”);
////////////////////////////////////Methodes////////////////////////////////////
私有void填充()
{
SqlCeCommand cm=新SqlCeCommand(“从principalID订购的电子邮件中选择*”,康涅狄格州);
listView1.Items.Clear();
尝试
{
SqlCeDataReader dr=cm.ExecuteReader();
while(dr.Read())
{
ListViewItem it=新的ListViewItem(dr[“principalID”].ToString());
it.SubItems.Add(dr[“email”].ToString());
添加(dr[“query”].ToString());
添加(dr[“subject”].ToString());
listView1.Items.Add(it);
}
Close博士();
dr.Dispose();
}
捕获(例外情况除外)
{
MessageBox.Show(例如Message);
Application.ExitThread();
}
}
////////////////////////////////////Methodes////////////////////////////////////
//插入按钮(用于数据插入)
私有无效按钮1\u单击(对象发送者,事件参数e)
{
如果(textBox1.Text==“”| | textBox2.Text==“”| | textBox3.Text==“”)
{
Show(“首先填写所有信息!”);
}
其他的
{
SqlCeCommand cmd=newsqlcecommand(“插入电子邮件(principalID,email,query,subject)值(@principalID,@email,@query,@subject)”,conn);
cmd.Connection=conn;
cmd.Parameters.AddWithValue(“@principalID”,textBox1.Text);
cmd.Parameters.AddWithValue(“@query”,textBox2.Text);
cmd.Parameters.AddWithValue(“@email”,textBox3.Text);
cmd.Parameters.AddWithValue(“@subject”,textBox4.Text);
尝试
{
int affectedrows=cmd.ExecuteNonQuery();
如果(影响方向>0)
{
填充();
MessageBox.Show(“电子邮件添加成功!”);
}
其他的
{
MessageBox.Show(“添加电子邮件失败!”);
}
}
捕获(例外情况除外)
{
MessageBox.Show(例如Message);
}
}
}
//如果显示表单,请更新列表视图
显示私有void Form1_(对象发送方,事件参数e)
{
尝试
{
conn.Open();
填充();
}
catch(SqlCeException-ex)
{
MessageBox.Show(例如Message);
Application.ExitThread();
}
}
//打开表单2并隐藏这个
私有无效按钮2\u单击(对象发送者,事件参数e)
{
this.Hide();
Form2 Form2=新Form2();
表2.Show();
}
私有void Form1\u加载(对象发送方、事件参数e)
{
}
//如果listview选择了启用按钮,则禁用
私有无效列表视图1\u SelectedIndexChanged(对象发送方,事件参数e)
{
如果(listView1.SelectedItems.Count>0)
{
按钮3.Enabled=true;
}
其他的
{
按钮3.Enabled=false;
}
}
私有无效按钮3\u单击(对象发送者,事件参数e)
{
}
//删除记录按钮
私有无效按钮3\u单击\u 1(对象发送者,事件参数e)
{
如果(listView1.SelectedItems.Count 0)
{
ListViewItem itm=listView1.SelectedItems[0];
字符串principalid=itm.SubItems[0]。文本;
字符串查询=itm。子项[1]。文本;
字符串email=itm.SubItems[2]。文本;
Form2 Form2=新Form2();
表2.Show();
form2.PrincipalID=PrincipalID;
form2.Query=Query;
表格2.电子邮件=电子邮件;
}
}
私有作废Form1\u FormClosing(对象发送方,FormClosingEventArgs e)
{
}
}
}为什么要使用listview。您可以改用datagridview。您可以将数据库文件与datagridview绑定,后者将创建更新、选择和插入命令本身。我不明白您为什么不能这样做。在listview中更新项目相对容易 您需要为您的
列表视图创建EditItemTemplate
,以便文本框显示在要编辑的行中
您可以在ItemEditing
事件中处理此问题。
然后通过ListView
的itemUpdatement
事件处理更新
下面我发布了一个示例:它可能会帮助您:
按如下方式创建ListView标记:
<asp:ListView ID="lvwTest" runat="server" OnItemDeleting="lvwTest_ItemDeleting" OnItemEditing="lvwTest_ItemEditing"
OnItemUpdating="lvwTest_ItemUpdating">
<LayoutTemplate>
<table>
<tr>
<td>
Column1
</td>
<td>
Column2
</td>
<td>
Column3
</td>
<td>
Action
</td>
</tr>
<tr id="itemplaceholder" runat="server">
</tr>
</table>
</LayoutTemplate>
<ItemTemplate>
<tr>
<td>
<asp:Label ID="lbl1" runat="server" Text='<%#Eval("col1") %>'></asp:Label>
</td>
<td>
<asp:Label ID="Label1" runat="server" Text='<%#Eval("col2") %>'></asp:Label>
</td>
<td>
<asp:Label ID="Label2" runat="server" Text='<%#Eval("col3") %>'></asp:Label>
</td>
<td>
<asp:Button ID="btnEdit" CommandName="Edit" runat="server" Text="Edit" />
</td>
</tr>
</ItemTemplate>
<EditItemTemplate>
<tr>
<td>
<asp:TextBox ID="txt1" runat="server" Text='<%#Bind("col1") %>'></asp:TextBox>
</td>
<td>
<asp:TextBox ID="txt2" runat="server" Text='<%#Bind("col2") %>'></asp:TextBox>
</td>
<td>
<asp:TextBox ID="txt3" runat="server" Text='<%#Bind("col3") %>'></asp:TextBox>
</td>
<td>
<asp:Button ID="btnUpdate" CommandName="Update" Text="Update" runat="server" />
<asp:Button ID="btnCancel" CommandName="Cancel" Text="Cancel" runat="server" />
</td>
</tr>
</EditItemTemplate>
</asp:ListView>
项目更新:
protected void lvwTest_ItemUpdating(object sender, ListViewUpdateEventArgs e)
{
TextBox txt = (lvwTest.Items[e.ItemIndex].FindControl("txt1")) as TextBox;
//as above find othe textboxes as well/
//create your update query
//SqlCeCommand cmd = new SqlCeCommand(updateQuery, cn);
//and rest of the syntax
lvwTest.EditIndex = -1;
BindGrid();
}
您的数据源:
public void BindGrid()
{
DataTable db = new DataTable();
db.Columns.Add("col1");
db.Columns.Add("col2");
db.Columns.Add("col3");
db.Rows.Add("1", "2", "3");
db.Rows.Add("1", "2", "3");
db.Rows.Add("1", "2", "3");
lvwTest.DataSource = db;
lvwTest.DataBind();
}
页面内部的页面加载
if (!IsPostBack)
BindGrid();
我没有真正的得到EditItemTemplate部分在顶部,您有一个示例网站吗?这是一个例子,直接复制粘贴代码并运行。EditItemTemplate类似于ItemTemplate,但它仅在调用“编辑”命令时出现
if (!IsPostBack)
BindGrid();