PDA

View Full Version : Lấy dữ liệu trong Gird Control ( Devexpress)



Reallylove2009
22-01-2011, 03:05 PM
Mình đang làm đề tài nghiên cứu cái Gird Control trong Devexpress. Ban đầu cứ tưởng nó giống như datagird view bên Net Framework 4.0 hix bây giờ làm mới thấy nó rối rắm
Bên Net 4.0 thì datagirdview có sự kiện Cellclick khi mình click vào 1 Cell bất kì trên datagirdview thì có thể lấy giá trị của cả dòng đó

tetbox1=Datagirdview.currentrows.cell[0].values.tostring();
tetbox2=Datagirdview.currentrows.cell[1].values.tostring();
nhưng bên Girdcontrol thì làm hoài mà ko được.
Bạn nào biết chỉ mình với

thuan199
22-01-2011, 03:08 PM
tetbox1.Text = Datagirdview.Rows[luoi.CurrentRow.Index].Cells[0].Value.ToString();

Mình thấy bạn không có thuộc tính .Text của Textbox

daolong83
22-01-2011, 03:15 PM
DataGridView.GetRowCellValue(DataGridView.FocusedR owHandle, "Ten_Cell").ToString()

DataGridView là tên cái gridView bên trong nhé, không phải tên của cái grid control đâu!

daolong83
22-01-2011, 03:16 PM
tetbox1.Text = Datagirdview.Rows[luoi.CurrentRow.Index].Cells[0].Value.ToString();

Mình thấy bạn không có thuộc tính .Text của Textbox
Quan trọng là lệnh lấy giá trị chưa đúng bạn ạ!

Reallylove2009
22-01-2011, 06:05 PM
Quan trọng là lệnh lấy giá trị chưa đúng bạn ạ!

Thanks bạn. bạn trả lời đúng ý mình rồi. Thanks bạn nhé
Để test thử rồi xin bạn chỉ giáo tiếp

Reallylove2009
22-01-2011, 06:09 PM
tetbox1.Text = Datagirdview.Rows[luoi.CurrentRow.Index].Cells[0].Value.ToString();

Mình thấy bạn không có thuộc tính .Text của Textbox

code đó là mình viết tay để làm ví dụ thôi :)

Reallylove2009
22-01-2011, 06:25 PM
DataGridView.GetRowCellValue(DataGridView.FocusedR owHandle, "Ten_Cell").ToString()

DataGridView là tên cái gridView bên trong nhé, không phải tên của cái grid control đâu!

Bạn ơi, mình đã làm theo cách của bạn

private void gridView1_CustomRowCellEditForEditing(object sender, DevExpress.XtraGrid.Views.Grid.CustomRowCellEditEv entArgs e)
{

t.Text = gridView1.GetRowCellValue(gridView1.FocusedRowHand le,e.Column).ToString();


}

nhưng khi mình click vào ô nào thì nó hiện values của ô đó lên text box thôi.


Ở đây mình muốn là khi mình click lên 1 cell bất kì, thì dữ liệu của dòng chứa cell hiện hết lên các text box.


textbox1.text chứa dữ liệu cell[0];
textbox2.text chứa dữ liệu cell[1];
textbox1.text chứa dữ liệu cell[2];


ví dụ khi click vào 1 cell bất kì. nó giống với câu lệnh này bên datagirdview nè

tetbox1.text=Datagirdview.currentrows.cell[0].values.tostring();
mong bạn giúp đỡ

daolong83
22-01-2011, 10:49 PM
Thì cần dữ liệu ô nào bạn lấy theo tên cột tương ứng là được mà(tên cột thay vào chỗ tên cell đó), hôm nay mình hơi bận chút, đợi thứ hai mình sẽ gửi kèm project mẫu cho!

Reallylove2009
22-01-2011, 11:08 PM
Thì cần dữ liệu ô nào bạn lấy theo tên cột tương ứng là được mà(tên cột thay vào chỗ tên cell đó), hôm nay mình hơi bận chút, đợi thứ hai mình sẽ gửi kèm project mẫu cho!

thanks bạn rất nhiều. Mình đã làm được rồi

t.Text = gridView1.GetRowCellValue(e.RowHandle, "Ten").ToString();
t1.Text = gridView1.GetRowCellValue(e.RowHandle, "MSSV").ToString();

Mình xin hỏi bạn thêm cách chèn hình vào Girdcontrol nha. Mình có 1 column định dạng Picture edit. Mình muốn khi load sản phẩm lên thì tương ứng với mỗi sản phẩm là 1 hình minh hoa. Hihi search nhiều làm rồi nhưng chưa làm đuôc. thứ 2 rảnh giúp mình nha. Thanks bạn trước

daovthinh
23-01-2011, 01:13 PM
int row = gridView1.FocusedRowHandle;

rồi bạn gán các trường như sau

tieude = dt.Rows[row]["Ten_Tuyen_Dung"].ToString();



..........................

Reallylove2009
24-01-2011, 10:21 AM
Khi nào online send cho mình cái project mẫu nha DaoLong83 :)

daolong83
25-01-2011, 02:38 PM
thanks bạn rất nhiều. Mình đã làm được rồi

t.Text = gridView1.GetRowCellValue(e.RowHandle, "Ten").ToString();
t1.Text = gridView1.GetRowCellValue(e.RowHandle, "MSSV").ToString();

Mình xin hỏi bạn thêm cách chèn hình vào Girdcontrol nha. Mình có 1 column định dạng Picture edit. Mình muốn khi load sản phẩm lên thì tương ứng với mỗi sản phẩm là 1 hình minh hoa. Hihi search nhiều làm rồi nhưng chưa làm đuôc. thứ 2 rảnh giúp mình nha. Thanks bạn trước

Bạn cho mình biết là hình ảnh bạn lưu ở đâu?
Nếu hình ảnh lưu trong csdl thì bạn cứ gán datasource cho gridview bên trong như thường, cột tương ứng với images thì bạn gán columnedit là cái picture edit đó, đặt thuộc tính sizemode cho picture edit là zoom, đồng thời chình chiều cao và chiều rộng của ô chứa hình thích hợp là được.
Projecvt mẫu:
http://www.mediafire.com/download.php?78eo5v6dshaimz0

Reallylove2009
26-01-2011, 10:17 AM
Bạn cho mình biết là hình ảnh bạn lưu ở đâu?
Nếu hình ảnh lưu trong csdl thì bạn cứ gán datasource cho gridview bên trong như thường, cột tương ứng với images thì bạn gán columnedit là cái picture edit đó, đặt thuộc tính sizemode cho picture edit là zoom, đồng thời chình chiều cao và chiều rộng của ô chứa hình thích hợp là được.
Projecvt mẫu:
http://www.mediafire.com/download.php?78eo5v6dshaimz0

trước tiên mình chân thành cám ơn bạn đã giúp đỡ.
Trong csdl mình có 1 table sản phẩm. gồm các fiel
Masp, Tensp, hinhsp( kiểu nvarchar lưu đường dẫn của hình)
Trong Girdview mình sẽ có 1 column đc set là pictureedit. Khi mình load sản phẩm lên girdview thì column picture edit sẽ load hình trong csdl.
Thanks bạn

Reallylove2009
26-01-2011, 10:39 AM
Bạn ah. mình chưa hiểu kiểu lưu trữ image trong cơ sở dữ liệu. ví dụ mình có 1 hình, thì mình lưu trữ thế nào

daolong83
26-01-2011, 11:15 AM
Bạn chuyển hình ảnh thành kiểu byte, trong csdl thì trường hình ảnh bạn để kiểu image:

OpenFileDialog dag = new OpenFileDialog();

if (dag.ShowDialog() == System.Windows.Forms.DialogResult.OK) {
PictureBox1.Image = Image.FromFile(dag.FileName);

string strConn = string.Format("Server=.;Database=TEST;UID=sa;PWD=sa;");
System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection();

con.ConnectionString = strConn;
con.Open();

string sql = "INSERT INTO tblHinhAnh(hinhanh) VALUES(@hinhanh)";
System.Data.SqlClient.SqlCommand sqlcmd = new System.Data.SqlClient.SqlCommand();
sqlcmd.CommandText = sql;
sqlcmd.Connection = con;

byte[] img = System.IO.File.ReadAllBytes(dag.FileName);


SqlParameter parm = new SqlParameter();
parm.SqlDbType = SqlDbType.Image;
parm.ParameterName = "@hinhanh";
parm.Value = img;
sqlcmd.Parameters.Add(parm);
sqlcmd.ExecuteNonQuery();
//GridControl1.DataSource = dt
//GridView1.Columns("hinhanh").ColumnEdit = pic1

con.Close();
}

Reallylove2009
26-01-2011, 11:49 AM
Bạn chuyển hình ảnh thành kiểu byte, trong csdl thì trường hình ảnh bạn để kiểu image:

OpenFileDialog dag = new OpenFileDialog();

if (dag.ShowDialog() == System.Windows.Forms.DialogResult.OK) {
PictureBox1.Image = Image.FromFile(dag.FileName);

string strConn = string.Format("Server=.;Database=TEST;UID=sa;PWD=sa;");
System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection();

con.ConnectionString = strConn;
con.Open();

string sql = "INSERT INTO tblHinhAnh(hinhanh) VALUES(@hinhanh)";
System.Data.SqlClient.SqlCommand sqlcmd = new System.Data.SqlClient.SqlCommand();
sqlcmd.CommandText = sql;
sqlcmd.Connection = con;

byte[] img = System.IO.File.ReadAllBytes(dag.FileName);


SqlParameter parm = new SqlParameter();
parm.SqlDbType = SqlDbType.Image;
parm.ParameterName = "@hinhanh";
parm.Value = img;
sqlcmd.Parameters.Add(parm);
sqlcmd.ExecuteNonQuery();
//GridControl1.DataSource = dt
//GridView1.Columns("hinhanh").ColumnEdit = pic1

con.Close();
}


thanks nhiều nhiều. ngủ dậy mình sẽ test. ước gì có thể thanks trực tiếp :) 1 ly cafe chẳng hạn

Reallylove2009
26-01-2011, 10:29 PM
Daolong83 ơi.Mình có 1 columns và edit nó sang "repositoryItemCheckEdit1" làm sao mình có thể check nhiều dòng 1 lúc. mình chỉ checked dc 1 rơ ma thôi. và làm sao mình bắt đựoc sự kiện check đc

daolong83
27-01-2011, 02:04 PM
Bạn thay đổi trực tiếp giá trị của cell là được(giả sử columns cần thao tác có tên "checked"):

private void btnSetChecked_Click(object sender, EventArgs e)
{
//set checked for selected row
gridView1.SetRowCellValue(gridView1.FocusedRowHand le, "checked", 1);

}

private void btnClearChecked_Click(object sender, EventArgs e)
{
//clear checked for selected row
gridView1.SetRowCellValue(gridView1.FocusedRowHand le, "checked", 0);

}
Để check nhiều dòng thì bạn dùng vòng for duyệt qua các dòng là được.

for (int i = 0; i < gridView1.RowCount ; i++)
{
gridView1.SetRowCellValue(i, "checked", 1);
}

Reallylove2009
27-01-2011, 07:00 PM
Bạn thay đổi trực tiếp giá trị của cell là được(giả sử columns cần thao tác có tên "checked"):

private void btnSetChecked_Click(object sender, EventArgs e)
{
//set checked for selected row
gridView1.SetRowCellValue(gridView1.FocusedRowHand le, "checked", 1);

}

private void btnClearChecked_Click(object sender, EventArgs e)
{
//clear checked for selected row
gridView1.SetRowCellValue(gridView1.FocusedRowHand le, "checked", 0);

}
Để check nhiều dòng thì bạn dùng vòng for duyệt qua các dòng là được.

for (int i = 0; i < gridView1.RowCount ; i++)
{
gridView1.SetRowCellValue(i, "checked", 1);
}



btnSetChecked_Click(object sender, EventArgs e)
mình phải tạo 1 button ở ngoài Gridview hả bạn. sau đó tạo sự kiện click phai ko.
http://sphotos.ak.fbcdn.net/hphotos-ak-snc6/hs080.snc6/169057_168704043175188_100001067791958_348174_4668 728_n.jpg
Trên là cái hình mình đang làm. khi mình check vào row1 thì textbox 1 hiện lên MSSV của hàng đó, và đồng thơi khi check vào Row1 thì nó cũng sẽ thực hiện 1 hàm tính toán tổng số tiền sinh viên phải trả để hiện lên Textbox 2.
Mình muốn có thể chọn row2 mà cái dấu tick của checkbox ở row1 vẫn còn.Như bạn nói dùng for thì nó sẽ check hết rồi ko bỏ cái nào.
Mong bạn chỉ tiếp cho mình

daolong83
28-01-2011, 08:34 AM
Bạn tham khảo project mẫu của mình nhé, khi bạn check hay bỏ check bằng cách nhấn chuột vào ô check nó sẽ tự động tính tổng và in ra ô text.
Để gán giá trị cho cell tương ứng thì trong sự kiện CheckedChanged của itemCheckEdit1 bạn viết như sau:


gridView1.SetRowCellValue(gridView1.FocusedRowHand le, "checked",!(bool )gridView1.GetRowCellValue(gridView1.FocusedRowHan dle, "checked") );//Mục đích là để ngược giá trị của cell "checked".

project:
http://www.mediafire.com/file/22r5a44m7dr4rat/TestCheked.rar

Reallylove2009
28-01-2011, 12:46 PM
Daolong83 xem dùm mình lỗi này. cái project của bạn phần giao diện nó bị lỗi này
http://a6.sphotos.ak.fbcdn.net/hphotos-ak-ash1/hs781.ash1/167104_168911479821111_100001067791958_348925_6219 169_n.jpg
mình không biết sửa sao hết nên có chỗ này chưa hiểu :(
gridView1.Columns["checked"].ColumnEdit = itemCheckEdit1;
itemcheckEdit1 khai báo ở đâu vậy bạn. hihi làm phiền hơi nhiều

Reallylove2009
28-01-2011, 01:43 PM
mình đã làm dc rồi bạn ah.

Reallylove2009
04-02-2011, 04:05 PM
Daolong83 cho mình hỏi cách load dữ liệu lên Combobox với. mình có 1 column trong Gridview và muốn có 1 column edit kiểu combobox.
Mình có 3 loại hàng
Mã SP TÊN SP
GK- Giải Khát
CF- CaFE
ST- SINHTO
combobox se load lên 3 loai sản phảm đó. nó sẽ hiển thị tên sản phẩm
và làm sao mình lấy đc Masp ứng với tên sản phẩm.
Khi nào rảnh thì giúp mình nhé. Chúc bạn ăn tết vui vè. gặp nhiều may mắn

Reallylove2009
18-02-2011, 10:53 PM
Bạn nào biết Devexpress chỉ mình cách bắt sự kiện khi click vào 1 columns or 1 rows tren cardview với.
Ở trong gridview mình đã làm đc. với sự kiện
gridView1_CustomRowCellEditForEditing()
còn trong cardview ko biết cách làm sao.

Reallylove2009
19-02-2011, 09:16 AM
có ai biết ko. chỉ mình với

suuhavetimeor550
30-03-2011, 12:25 PM
mấy anh oi cho em hỏi:khi sử dung gritdcontrol trong dvexpress lam sao de xuat hien duoc cai nay vay may anh private void gridView1_CustomRowCellEditForEditing() {}?

suuhavetimeor550
30-03-2011, 12:35 PM
anh oi co thể hướng dẩn cụ thê cho em biết được k anh,cai hàm
private void gridView1_CustomRowCellEditForEditing()
{
}
click ở đâu để nó xuất hiện hả anh.em đã đọc bài hướng dẩn trên nhưng chưa làm đươc.mấy anh giúp em với!

elkidvnn1
06-04-2011, 10:10 PM
Nhìn trong cái Gridcontrol nó có cái bảng nhỏ nhỏ mà có cái chữ Run Design đó:| nhìn kĩ thì nó có cái Gridview1 nhỏ nhỏ trong đó:T bấm vào đó rồi lấy sự kiện.

vnnstar
10-05-2012, 12:21 AM
Làm Sao khi CDouble Click Vào 1 Cell Bất Kì của GridView Dev thì nó mở Form mới vậy Mấy bro. Mình Làm rùi Mà chỉ click ở ngoài hay viền thôi. KHông click trong Cell đc

Reallylove2009
11-05-2012, 12:39 AM
private void gridView1_ShownEditor(object sender, EventArgs e)
{

DevExpress.XtraGrid.Views.Grid.GridView view = sender as DevExpress.XtraGrid.Views.Grid.GridView;

view.ActiveEditor.DoubleClick += new EventHandler(ActiveEditor_DoubleClick);
}
private void ActiveEditor_DoubleClick(object sender, System.EventArgs e)
{
MessageBox.Show("abc");
}
Đoạn code này của http://www.devexpress.com/Support/Center/p/A412.aspx

Rongcon.com.vn
28-05-2012, 11:18 AM
Mình có đoạn code này để fill dữ liệu từ Data Table vào bảng Excel.


for (int i = 2; i < dtData.Rows.Count + 2; i++)
{
for (int j = 2; j < dtData.Columns.Count; j++)
{
worksheet.Cells[i + 2, j + 1] = dtData.Rows[i - 2][j].ToString();
}
}

Nhưng bây giờ mình muốn fill trực tiếp từ gridview của xtragrid (devexpress) thì có lệnh nào tương tự không. mình đã mới làm được 2 cái vòng for, còn hàm chính


worksheet.Cells[i + 2, j + 1] = dtData.Rows[i - 2][j].ToString();

này thì mình chưa gọi được

elkidvnn1
29-05-2012, 08:25 AM
gcIssue.ExportToXls(Application.StartupPath.ToStri ng & "\ex.xls")
trong đó gcIssue là Gridcontrol (không phải gridview nhé). Gridcontrol bao trùm cái gridview:D

hungvboys
17-08-2012, 01:58 PM
thank bạn DaoLong38,mình cứ lấy tên gridcontrol hèn gì tìm mãi ko ra