Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过listview和textbox sql server compact 4更新数据_C#_Database_Listview - Fatal编程技术网

C# 通过listview和textbox sql server compact 4更新数据

C# 通过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

我已经做了一个数据库应用程序。目前我有一个添加和删除功能,但现在我正在搜索更新功能的帮助。我已经在这个网站上搜索了所有的答案,但我想没有运气。所以我想要的是,如果我在ListView中单击一条记录,它会自动显示在文本框中,这样我就可以更改内容,当我单击“更新”按钮时,它必须更新该记录

非常感谢您的帮助

我的表格代码1

        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();