C# datagridview和npgsql的更新命令出现问题
我对NpgsqlCommandBuilder和datagridview有一些问题 用数据填充datagridview没有问题,但我无法让updatecommand正常工作 我的代码如下所示C# datagridview和npgsql的更新命令出现问题,c#,datagridview,npgsql,C#,Datagridview,Npgsql,我对NpgsqlCommandBuilder和datagridview有一些问题 用数据填充datagridview没有问题,但我无法让updatecommand正常工作 我的代码如下所示 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Npgsql;
namespace Golfklubben
{
public partial class LaggTillResultat : Form
{
private databaseConnection dataConnection = new databaseConnection();
private BindingSource bindingSource1 = new BindingSource();
private NpgsqlDataAdapter daResult = new NpgsqlDataAdapter();
public LaggTillResultat()
{
InitializeComponent();
FillTavlingar();
dataGridView1.DataSource = bindingSource1;
FillResultat();
dataGridView1.Columns[0].HeaderText = "Deltagare";
dataGridView1.Columns[1].HeaderText = "Poäng";
}
/// <summary>
/// Metod för att fylla en combobox med tävlingar från databasen med en dataadapter
/// Method for filling a combobox with data from the database
/// </summary>
private void FillTavlingar()
{
DateTime date = DateTime.Now;
string strDate = date.ToString("yyyy-MM-dd");
try
{
DataTable table = new DataTable();
NpgsqlConnection conn = new NpgsqlConnection(dataConnection.getConnection());
NpgsqlDataAdapter da = new NpgsqlDataAdapter();
NpgsqlCommand command = new NpgsqlCommand("SELECT tavlingsID, titel FROM tavlingar WHERE datum > @datum ORDER BY titel ASC;", conn);
command.Parameters.AddWithValue("@datum", strDate);
da.SelectCommand = command;
da.Fill(table);
cbTavling.DataSource = table.DefaultView;
cbTavling.DisplayMember = "titel";
cbTavling.ValueMember = "tavlingsID";
}
catch (Exception err)
{
MessageBox.Show("Ett fel uppstod när tävlingarna skulle hämtas " + err.ToString(), "Fel vid uppdatering av handicap", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
/// <summary>
/// Metod för att fylla en datagridview med resultat från databasen
/// Method for filling the datagridview with data from the datbase
/// </summary>
private void FillResultat()
{
if (cbTavling.SelectedValue == null)
{
MessageBox.Show("Det finns ingen tävling idag!\nDialogrutan kommer att stängas.");
this.Close();
}
try
{
NpgsqlConnection conn = new NpgsqlConnection(dataConnection.getConnection());
NpgsqlCommand command = new NpgsqlCommand("SELECT golfid, resultat FROM anmalningar WHERE tavlingsid = @tavlingsID ORDER BY golfid ASC;", conn);
command.Parameters.AddWithValue("@TavlingsID", cbTavling.SelectedValue.ToString());
daResult = new NpgsqlDataAdapter(command);
NpgsqlCommandBuilder cb = new NpgsqlCommandBuilder(daResult);
DataTable dt = new DataTable();
dt.Locale = System.Globalization.CultureInfo.InvariantCulture;
daResult.Fill(dt);
bindingSource1.DataSource = dt;
}
catch (Exception err)
{
MessageBox.Show("FEL" + err.ToString());
}
}
private void btnSpara_Click(object sender, EventArgs e)
{
try
{
daResult.Update((DataTable)bindingSource1.DataSource);
}
catch (Exception err)
{
MessageBox.Show(err.ToString());
}
FillResultat();
}
private void cbTavling_SelectedIndexChanged(object sender, EventArgs e)
{
FillResultat();
}
/// <summary>
/// Hanterar formclosing eventet som körs när formuläret håller på att stängas, gömmer formuläret istället för att stänga det.
/// Det här är för att det annars inte går att öppna upp formuläret igen.
/// </summary>
/// <param name="e"></param>
protected override void OnFormClosing(FormClosingEventArgs e)
{
this.Hide();
e.Cancel = true;
}
private void btnAvbryt_Click(object sender, EventArgs e)
{
DialogResult result = MessageBox.Show("Vill du stänga formuläret?", "Stänger formuläret", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
if (result == DialogResult.Yes)
{
this.Hide();
}
else
return;
}
}
}
使用系统;
使用System.Collections.Generic;
使用系统组件模型;
使用系统数据;
使用系统图;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
使用System.Windows.Forms;
使用Npgsql;
名称空间Golfkluben
{
公共部分类LaggTillResultat:表单
{
专用databaseConnection dataConnection=新建databaseConnection();
private BindingSource bindingSource1=新BindingSource();
专用NpgsqlDataAdapter daResult=新的NpgsqlDataAdapter();
公共LaggTillResultat()
{
初始化组件();
FillTavlingar();
dataGridView1.DataSource=bindingSource1;
FillResultat();
dataGridView1.Columns[0].HeaderText=“Deltagare”;
dataGridView1.Columns[1]。HeaderText=“Poäng”;
}
///
///Metod för att fylla en combobox med tävlingar från Database med en dataadapter
///用数据库中的数据填充组合框的方法
///
私有无效填充Tavlingar()
{
DateTime date=DateTime.Now;
字符串strDate=date.ToString(“yyyy-MM-dd”);
尝试
{
DataTable=新的DataTable();
NpgsqlConnection conn=新的NpgsqlConnection(dataConnection.getConnection());
NpgsqlDataAdapter da=新的NpgsqlDataAdapter();
NpgsqlCommand=新的NpgsqlCommand(“选择tavlingsID,tavlingar中的titel,其中datum>@datum ORDER BY titel ASC;”,conn);
command.Parameters.AddWithValue(“@datum”,标准日期);
da.SelectCommand=命令;
da.填写(表格);
cbTavling.DataSource=table.DefaultView;
cbTavling.DisplayMember=“titel”;
cbTavling.ValueMember=“tavlingsID”;
}
捕获(异常错误)
{
MessageBox.Show(“Ett fel uppstod när tävlingarna skulle hämtas”+err.ToString(),“fel vid uppdatering av disability”,MessageBoxButtons.OK,MessageBoxIcon.Error);
}
}
///
///Metod för att fylla数据网格视图医学结果数据库
///用数据库中的数据填充datagridview的方法
///
私有void FillResultat()
{
if(cbTavling.SelectedValue==null)
{
MessageBox.Show(“Det finns ingen tävling idag!\n Dialogrutan kommer att stängas”);
这个。关闭();
}
尝试
{
NpgsqlConnection conn=新的NpgsqlConnection(dataConnection.getConnection());
NpgsqlCommand=new NpgsqlCommand(“选择golfid,来自anmalningar的结果,其中tavlingsid=@tavlingsid ORDER BY golfid ASC;”,康涅狄格州);
command.Parameters.AddWithValue(“@TavlingsID”,cbTavling.SelectedValue.ToString());
daResult=新的NpgsqlDataAdapter(命令);
NpgsqlCommandBuilder cb=新的NpgsqlCommandBuilder(daResult);
DataTable dt=新的DataTable();
dt.Locale=System.Globalization.CultureInfo.InvariantCulture;
数据结果填充(dt);
bindingSource1.DataSource=dt;
}
捕获(异常错误)
{
Show(“FEL”+err.ToString());
}
}
私有无效btnSpara\U单击(对象发送方,事件参数e)
{
尝试
{
更新((DataTable)bindingSource1.DataSource);
}
捕获(异常错误)
{
Show(err.ToString());
}
FillResultat();
}
私有void cbTavling_SelectedIndexChanged(对象发送方,事件参数e)
{
FillResultat();
}
///
///汉特拉尔·福姆雷特·福姆雷特·福姆雷特·福姆雷特·福姆雷特·福姆雷特·福姆雷特·福姆雷特·福姆雷特·福姆雷特·福姆雷特·福姆雷特·福姆雷特·斯特雷特。
///详细的härär för att annars inte går attöppna upp formuläret igen。
///
///
FormClosing(FormClosingEventArgs e)时受保护的覆盖无效
{
this.Hide();
e、 取消=真;
}
私有void btnAvbryt_单击(对象发送方,事件参数e)
{
DialogResult result=MessageBox.Show(“stänga formuläret村?”,“stänger formuläret”,MessageBoxButtons.YesNo,MessageBoxIcon.Warning);
if(result==DialogResult.Yes)
{
this.Hide();
}
其他的
返回;
}
}
}
我使用了MSDN的这个教程来解决这个问题。
请使用conn.Open();在执行命令之前
比如说
DataTable table = new DataTable();
NpgsqlConnection conn = new NpgsqlConnection(dataConnection.getConnection());
conn.Open();
NpgsqlDataAdapter da = new NpgsqlDataAdapter();
NpgsqlCommand command = new NpgsqlCommand("SELECT tavlingsID, titel FROM tavlingar WHERE datum > @datum ORDER BY titel ASC;", conn);
command.Parameters.AddWithValue("@datum", strDate);
da.SelectCommand = command;
da.Fill(table);
在您更新您的问题之前,没有人能够帮助您:仅包含相关代码、什么“不起作用”,以及您到目前为止试图做什么