私はASP.NETの初心者で、Windowsフォームを勉強しようとしています.Windowsフォームに簡単な学生テーブルを作成しようとしています.Windowsフォームでは、学生テーブルの詳細を追加、更新、削除できます. 削除にはストアド プロシージャを使用し、更新にはトリガーを使用したいと考えています。追加部分を実行しましたが、正常に動作します。トリガーの実装についてはあまり考えていません。現在、CellEndEditプロパティを使用して更新および削除しようとしています。ネットで検索したとき、編集および削除する最速の方法のようです。現在、Argument out of range 例外が発生しています。それを修正するのを手伝ってください。可能であれば、トリガーを実装するアイデアも教えてください。これまでに完成したコードとともに、フォーム ビューとデータベース構造を添付しました。どんな助けでも大歓迎です。
Class1.cs のコード
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
namespace WindowsFormsApplication1
{
public class Class1
{
SqlConnection con = new SqlConnection();
SqlCommand cmd = new SqlCommand();
public Class1()
{
con.ConnectionString = "server=.\\sqlexpress;database=sample;trusted_connection=true";
cmd.Connection = con;
}
public void opencon()
{
if (con.State == ConnectionState.Open)
con.Close();
con.Open();
}
public SqlConnection getcon
{
get
{
return con;
}
}
public SqlCommand getcmd
{
get
{
return cmd;
}
}
public DataSet dataview()
{
//cmd.CommandType = CommandType.Text;
//cmd.CommandText = "select * from Student_table";
SqlDataAdapter adp = new SqlDataAdapter("select * from Student_table",con);
DataSet ds = new DataSet();
//adp.SelectCommand = cmd;
adp.Fill(ds, "Student_table");
return ds;
}
}
}
Form.cs のコード
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
Class1 con = new Class1();
DataGridView grid = new DataGridView();
public Form1()
{
InitializeComponent();
//grid.CellEndEdit += new DataGridViewCellEventHandler();
}
private void Form1_Load(object sender, EventArgs e)
{
this.student_tableTableAdapter.Fill(this.sampleDataSet.Student_table);
}
private void button4_Click(object sender, EventArgs e)
{
con.opencon();
lblstatus.Text = "Connected";
}
private void button1_Click(object sender, EventArgs e)
{
con.opencon();
con.getcmd.CommandText="insert into Student_table values('"+txtstname.Text+"','"+txtgrname.Text+"', '"+Convert.ToDateTime(dob.Value)+"','"+txtadd1.Text+"','"+txtadd2.Text+"')";
con.getcmd.ExecuteNonQuery();
//con.Close();
}
private void button2_Click(object sender, EventArgs e)
{
con.opencon();
con.getcmd.CommandType = CommandType.Text;
con.getcmd.CommandText = "select * from Student_table";
SqlDataAdapter adp = new SqlDataAdapter();
DataSet ds = new DataSet();
adp.SelectCommand = con.getcmd;
adp.Fill(ds,"Student_table");
ds = con.dataview();
dataGridView1.DataSource = ds.Tables["Student_table"].DefaultView;
}
private void button3_Click(object sender, EventArgs e)
{
Application.Exit();
}
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
}
private void btndel_Click(object sender, EventArgs e)
{
}
private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
string query = string.Format(
"UPDATE Student_table set {0}='{1}' WHERE id={2}",
grid.Columns[e.ColumnIndex].Name, grid[e.ColumnIndex, e.RowIndex].Value,
grid[0, e.RowIndex].Value); //**Argument out of range exception error here**
try
{
con.getcmd.CommandType = CommandType.Text;
con.getcmd.CommandText = query;
con.opencon();
con.getcmd.ExecuteNonQuery();
}
catch (Exception ex)
{
MessageBox.Show(ex.StackTrace);
}
}
}
}
目標を達成するためにさまざまなことを試していたので、コメントを無視してください:) http://i50.tinypic.com/2yp0kl2.jpg