PDA

View Full Version : نمیدونم چجوری به این برنامه یه دیتا گرید ویو اضاف کنم و با انتخاب سطرش عملیات ویرایش و حذفو اجام بدم



saeed-71
جمعه 24 آذر 1391, 21:32 عصر
سلام.
نمیدونم چجوری به این برنامه یه دیتا گرید ویو اضاف کنم و با انتخاب سطرش عملیات ویرایش و حذفو انجام بدم.
الان عمیات حذف و ویرایش بر حسب تکست باکسا انجام میشه.میشه یه نگاه به برنامه بندازید و کمکک کنید ؟
ممنونم.

shahab2025
شنبه 25 آذر 1391, 09:38 صبح
با سلام
خیلی وقت ندارم که کاملا توضیح بدم
ولی توی برنامه تغییراتی دادم که مشکلت را حل میکنه
دکمه ادیت را هم اصلاح کردم - از روی آن خذف را خودت اصلاح کن

saeed-71
شنبه 25 آذر 1391, 10:37 صبح
واقعا ممنونم دوست عزیز اما موقع ویرایش این دو تا ارور رو میده باید چیکارشون کنم؟

saeed-71
شنبه 25 آذر 1391, 13:20 عصر
دوستان کسی نیست بتونه کمک کنه؟
اینم کد برنامه.

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;

namespace MyFirstADO
{
public partial class Form1 : Form
{
int num = -1;
DataTable tblDic;
DataView dv;
public Form1()
{
InitializeComponent();
}
private void refreshData()
{
if (num != -1)
{
//txtWord.Text = tblDic.Rows[num][1].ToString();
//txtMeaning.Text = tblDic.Rows[num][2].ToString();
//lblID.Text = tblDic.Rows[num][0].ToString();
lblID.Text = dv[num][0].ToString();
txtWord.Text = dv[num][1].ToString();
txtMeaning.Text = dv[num][2].ToString();
}
}

private void Form1_Load(object sender, EventArgs e)
{
FillData();
for (int i = 0; i < tblDic.Columns.Count; i++)
{
cmbSort.Items.Add(tblDic.Columns[i].ColumnName);
}
cmbSort.SelectedIndex = 0;
}

private void btnAdd_Click(object sender, EventArgs e)
{
frmNewEdit newEdit = new frmNewEdit();
newEdit.ShowDialog();
if (newEdit.DialogResult == DialogResult.OK)
{
if (connection.State == ConnectionState.Closed)
{
connection.Open();
}
adapter.InsertCommand.Parameters[0].Value = newEdit.WordValue;
adapter.InsertCommand.Parameters[1].Value = newEdit.MeaningValue;
adapter.InsertCommand.ExecuteNonQuery();
connection.Close();
//refreshData();
txtLog.Text += "new record successfully added.\n";
FillData();
}
}
private void FillData()
{
ds.Clear();
adapter.Fill(ds);
tblDic = ds.Tables[0];
dv = new DataView(tblDic);
refreshData();
dataGridView1.DataSource = ds;
dataGridView1.DataMember = "tblDic";
}

private void btnNext_Click(object sender, EventArgs e)
{
if (num < tblDic.Rows.Count - 1)
num++;
refreshData();
}

private void btnLast_Click(object sender, EventArgs e)
{
num = tblDic.Rows.Count - 1;
refreshData();
}

private void btnPre_Click(object sender, EventArgs e)
{
if (num > 0)
num--;
refreshData();
}

private void btnFirst_Click(object sender, EventArgs e)
{
if (tblDic.Rows.Count > 0)
num = 0;
refreshData();
}

private void btnRemove_Click(object sender, EventArgs e)
{
DialogResult rez = MessageBox.Show("Are you sure to delete this record?", "Question", MessageBoxButtons.YesNo);
if (rez == DialogResult.Yes)
{
adapter.DeleteCommand.Parameters[0].Value = tblDic.Rows[num][0];
if (connection.State == ConnectionState.Closed)
connection.Open();
adapter.DeleteCommand.ExecuteNonQuery();
connection.Close();
num--;
txtLog.Text += "One record successfully deleted.\n";
FillData();
}
}

private void btnEdit_Click(object sender, EventArgs e)
{
if (dataGridView1.SelectedRows.Count == 0 )
{
MessageBox.Show("A row should be selected");
return;
}
frmNewEdit newEdit = new frmNewEdit();
//newEdit.WordValue = tblDic.Rows[num][1].ToString();
//newEdit.MeaningValue = tblDic.Rows[num][2].ToString();
newEdit.WordValue = dataGridView1.CurrentRow.Cells[1].Value.ToString();
newEdit.MeaningValue = dataGridView1.CurrentRow.Cells[2].Value.ToString();
DialogResult rez = newEdit.ShowDialog();
if (rez == DialogResult.OK)
{
adapter.UpdateCommand.Parameters[0].Value = newEdit.WordValue;
adapter.UpdateCommand.Parameters[1].Value = newEdit.MeaningValue;
adapter.UpdateCommand.Parameters[2].Value = tblDic.Rows[num][0];
if (connection.State == ConnectionState.Closed)
connection.Open();
adapter.UpdateCommand.ExecuteNonQuery();
connection.Close();
FillData();
}
}

private void cmbSort_SelectedIndexChanged(object sender, EventArgs e)
{
switch (cmbSort.SelectedIndex)
{
case 0:
dv.Sort = "ID";
num = dv.Find(lblID.Text);
break;
case 1:
dv.Sort = "word";
num = dv.Find(txtWord.Text);
break;
case 2:
dv.Sort = "meaning";
num = dv.Find(txtMeaning.Text);
break;
}
refreshData();
}
int rez = -1;
private void btnFind_Click(object sender, EventArgs e)
{
try
{
rez = dv.Find(txtFind.Text);
if (rez == -1)
MessageBox.Show("Can not find this record.");
else
{
num = rez;
refreshData();
}
}
catch (FormatException ex)
{
DialogResult r=MessageBox.Show("you select a bad column sort\nDo you want to change the the sort selection?","Error!",MessageBoxButtons.YesNo);
if (r == DialogResult.Yes)
cmbSort.Select();
else
{
txtFind.SelectionStart = 0;
txtFind.SelectionLength = txtFind.Text.Length;
txtFind.Select();
}

}
}
}
}

shahab2025
شنبه 25 آذر 1391, 13:22 عصر
این تکه کدت را اصلاح کن

if (rez == DialogResult.OK)
{
adapter.UpdateCommand.CommandText = "UPDATE tblDic SET Word = @Word, Meaning = @Meaning WHERE ID=@ID";
adapter.UpdateCommand.Parameters[0].Value = newEdit.WordValue;
adapter.UpdateCommand.Parameters[1].Value = newEdit.MeaningValue;
adapter.UpdateCommand.Parameters[2].Value = dataGridView1.CurrentRow.Cells[0].Value.ToString();

if (connection.State == ConnectionState.Closed)
connection.Open();
adapter.UpdateCommand.ExecuteNonQuery();
connection.Close();
FillData();
}

saeed-71
شنبه 25 آذر 1391, 13:28 عصر
اپدیت دیتا اداپتور.
میشه توضیح بدید؟من مبتدیم!

shahab2025
شنبه 25 آذر 1391, 13:45 عصر
اپدیت دیتا اداپتور.
میشه توضیح بدید؟من مبتدیم!

دقت کن که فیلد ID نباید Update بشه فقط روش شرط میزاره

saeed-71
شنبه 25 آذر 1391, 13:58 عصر
دقت کن که فیلد ID نباید Update بشه فقط روش شرط میزاره

خوب با حذفشم مشکلم حل نشد؟
الان باید چیکار کنم که مشکل حل بشه؟
ارورش میگه There is no row at position -1.
خوب منم اون خطو پاک کردم .
اما باز ارور داد!
چیکار کنم دوست عزیز؟

shahab2025
شنبه 25 آذر 1391, 14:13 عصر
خوب با حذفشم مشکلم حل نشد؟
الان باید چیکار کنم که مشکل حل بشه؟
ارورش میگه There is no row at position -1.
خوب منم اون خطو پاک کردم .
اما باز ارور داد!
چیکار کنم دوست عزیز؟

واسه حذفش اینگونه تغییر بده

DialogResult rez = MessageBox.Show("Are you sure to delete this record?", "Question", MessageBoxButtons.YesNo);
if (rez == DialogResult.Yes)
{
adapter.DeleteCommand.CommandText = "DELETE FROM TBLDIC WHERE ID=@ID";
adapter.DeleteCommand.Parameters[0].Value = dataGridView1.CurrentRow.Cells[0].Value.ToString();
if (connection.State == ConnectionState.Closed)
connection.Open();
adapter.DeleteCommand.ExecuteNonQuery();
connection.Close();
//num--;
txtLog.Text += "One record successfully deleted.\n";
FillData();
}
تست کردم کار میکنه

saeed-71
شنبه 25 آذر 1391, 14:25 عصر
ممنون.اصلاحاتی رو که گفتید رو انجام دادم و نتیجش این کد و این برنامه ای رو که ضمیمه کردم د.اما همون ارور رو هنوز میده.

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;

namespace MyFirstADO
{
public partial class Form1 : Form
{
int num = -1;
DataTable tblDic;
DataView dv;
public Form1()
{
InitializeComponent();
}
private void refreshData()
{
if (num != -1)
{
//txtWord.Text = tblDic.Rows[num][1].ToString();
//txtMeaning.Text = tblDic.Rows[num][2].ToString();
//lblID.Text = tblDic.Rows[num][0].ToString();
lblID.Text = dv[num][0].ToString();
txtWord.Text = dv[num][1].ToString();
txtMeaning.Text = dv[num][2].ToString();
}
}

private void Form1_Load(object sender, EventArgs e)
{
FillData();
for (int i = 0; i < tblDic.Columns.Count; i++)
{
cmbSort.Items.Add(tblDic.Columns[i].ColumnName);
}
cmbSort.SelectedIndex = 0;
}

private void btnAdd_Click(object sender, EventArgs e)
{
frmNewEdit newEdit = new frmNewEdit();
newEdit.ShowDialog();
if (newEdit.DialogResult == DialogResult.OK)
{
if (connection.State == ConnectionState.Closed)
{
connection.Open();
}
adapter.InsertCommand.Parameters[0].Value = newEdit.WordValue;
adapter.InsertCommand.Parameters[1].Value = newEdit.MeaningValue;
adapter.InsertCommand.ExecuteNonQuery();
connection.Close();
//refreshData();
txtLog.Text += "new record successfully added.\n";
FillData();
}
}
private void FillData()
{
ds.Clear();
adapter.Fill(ds);
tblDic = ds.Tables[0];
dv = new DataView(tblDic);
refreshData();
dataGridView1.DataSource = ds;
dataGridView1.DataMember = "tblDic";
}

private void btnNext_Click(object sender, EventArgs e)
{
if (num < tblDic.Rows.Count - 1)
num++;
refreshData();
}

private void btnLast_Click(object sender, EventArgs e)
{
num = tblDic.Rows.Count - 1;
refreshData();
}

private void btnPre_Click(object sender, EventArgs e)
{
if (num > 0)
num--;
refreshData();
}

private void btnFirst_Click(object sender, EventArgs e)
{
if (tblDic.Rows.Count > 0)
num = 0;
refreshData();
}

private void btnRemove_Click(object sender, EventArgs e)
{
DialogResult rez = MessageBox.Show("Are you sure to delete this record?", "Question", MessageBoxButtons.YesNo);
if (rez == DialogResult.Yes)
{
adapter.DeleteCommand.CommandText = "DELETE FROM TBLDIC WHERE ID=@ID";
adapter.DeleteCommand.Parameters[0].Value = dataGridView1.CurrentRow.Cells[0].Value.ToString();
if (connection.State == ConnectionState.Closed)
connection.Open();
adapter.DeleteCommand.ExecuteNonQuery();
connection.Close();
//num--;
txtLog.Text += "One record successfully deleted.\n";
FillData();
}
}

private void btnEdit_Click(object sender, EventArgs e)
{
if (dataGridView1.SelectedRows.Count == 0 )
{
MessageBox.Show("A row should be selected");
return;
}
frmNewEdit newEdit = new frmNewEdit();
//newEdit.WordValue = tblDic.Rows[num][1].ToString();
//newEdit.MeaningValue = tblDic.Rows[num][2].ToString();
newEdit.WordValue = dataGridView1.CurrentRow.Cells[1].Value.ToString();
newEdit.MeaningValue = dataGridView1.CurrentRow.Cells[2].Value.ToString();
DialogResult rez = newEdit.ShowDialog();
if (rez == DialogResult.OK)
{
adapter.UpdateCommand.CommandText = "UPDATE tblDic SET Word = @Word, Meaning = @Meaning WHERE ID=@ID";
adapter.UpdateCommand.Parameters[0].Value = newEdit.WordValue;
adapter.UpdateCommand.Parameters[1].Value = newEdit.MeaningValue;
adapter.UpdateCommand.Parameters[2].Value = dataGridView1.CurrentRow.Cells[0].Value.ToString();

if (connection.State == ConnectionState.Closed)
connection.Open();
adapter.UpdateCommand.ExecuteNonQuery();
connection.Close();
FillData();
}
}

private void cmbSort_SelectedIndexChanged(object sender, EventArgs e)
{
switch (cmbSort.SelectedIndex)
{
case 0:
dv.Sort = "ID";
num = dv.Find(lblID.Text);
break;
case 1:
dv.Sort = "word";
num = dv.Find(txtWord.Text);
break;
case 2:
dv.Sort = "meaning";
num = dv.Find(txtMeaning.Text);
break;
}
refreshData();
}
int rez = -1;
private void btnFind_Click(object sender, EventArgs e)
{
try
{
rez = dv.Find(txtFind.Text);
if (rez == -1)
MessageBox.Show("Can not find this record.");
else
{
num = rez;
refreshData();
}
}
catch (FormatException ex)
{
DialogResult r=MessageBox.Show("you select a bad column sort\nDo you want to change the the sort selection?","Error!",MessageBoxButtons.YesNo);
if (r == DialogResult.Yes)
cmbSort.Select();
else
{
txtFind.SelectionStart = 0;
txtFind.SelectionLength = txtFind.Text.Length;
txtFind.Select();
}

}
}
}
}

shahab2025
شنبه 25 آذر 1391, 14:29 عصر
من خطایی در برنامه ام ندارم - این خطا کی و کجا ظاهر میشه ؟

saeed-71
شنبه 25 آذر 1391, 14:36 عصر
بعد از اینکه برنامه رو اجرا کردم و خاوستم یه سطر رو ویرایش کنم بعد از اینکه ویرایش شد و تایید رو زدم این ارور رو میده.
همچنین برای حذف!
شاید مشکل از سیستم منه؟!

shahab2025
شنبه 25 آذر 1391, 15:36 عصر
این پروژه شماست که روی سیستم منه چک کن موردی نداره

saeed-71
شنبه 25 آذر 1391, 16:23 عصر
بی نهایت ممنون از لطف و بزرگواریت که کمکم کردی.ممنون دوست عزیز.درسته.