PDA

View Full Version : Dropdownlist & Gridview...!!!



frontier
01-07-2009, 20:02
Bạn nào biết hướng dẫn mình cái này với:
Trên Webform mình có 1 dropdownlist hiển thị các nhóm dữ liệu, gridview hiển thị danh sách nhóm ứng với nhóm đã chọn ở dropdownlist.
Giờ mình muốn có thêm 1 trường Tất cả trên dropdownlist, khi chọn trường này sẽ hiển thị lên tất cả các dữ liệu của tất cả các nhóm lên Gridview..!
Bạn nào biết hướng dẫn cụ thể cho mình với nha...!
Thanks a lot...!!!

dq_ninh
01-07-2009, 21:56
Bạn nào biết hướng dẫn mình cái này với:
Trên Webform mình có 1 dropdownlist hiển thị các nhóm dữ liệu, gridview hiển thị danh sách nhóm ứng với nhóm đã chọn ở dropdownlist.

Cái trên này là khó nhất. Phải biết cách 1) lấy dữ liệu vào dropdown list, 2) lấy dữ liệu vào GridView, 3) thiết lập lọc (filter) dữ liệu và 4) khi dropdown list thay đổi, thì dùng GridView filter để hiển thị một phần của dữ liệu có liên hệ với giá trị của dropdown list box thôi



Giờ mình muốn có thêm 1 trường Tất cả trên dropdownlist, khi chọn trường này sẽ hiển thị lên tất cả các dữ liệu của tất cả các nhóm lên Gridview..!
Bạn nào biết hướng dẫn cụ thể cho mình với nha...!
Thanks a lot...!!!

Còn cái này thì dễ nếu đã làm được phần trên. Chỉ cần cho thêm một item mới với giá trị = "Tất Cả" vào dropdown list là xong. Đã làm được phần trên, đã có thể bỏ dữ liệu vào dropdownlist, tại sao lại phải hỏi phần dưới chứ?

Không có gì sai trái nếu dùng những source code sưu tầm được ở trên mạng đem về dùng. Nhưng cần phải hiểu được source code trước khi dùng, tại vì hầu hết những source code cần phải sửa chữa lại chút đỉnh cho hợp với chương trình của mình viết. Nếu dùng code mà không hiểu gì hết, có khác gì người mù lái xe hơi trên đường cao tốc.

frontier
02-07-2009, 23:19
Cái trên này là khó nhất. Phải biết cách 1) lấy dữ liệu vào dropdown list, 2) lấy dữ liệu vào GridView, 3) thiết lập lọc (filter) dữ liệu và 4) khi dropdown list thay đổi, thì dùng GridView filter để hiển thị một phần của dữ liệu có liên hệ với giá trị của dropdown list box thôi



Còn cái này thì dễ nếu đã làm được phần trên. Chỉ cần cho thêm một item mới với giá trị = "Tất Cả" vào dropdown list là xong. Đã làm được phần trên, đã có thể bỏ dữ liệu vào dropdownlist, tại sao lại phải hỏi phần dưới chứ?

Không có gì sai trái nếu dùng những source code sưu tầm được ở trên mạng đem về dùng. Nhưng cần phải hiểu được source code trước khi dùng, tại vì hầu hết những source code cần phải sửa chữa lại chút đỉnh cho hợp với chương trình của mình viết. Nếu dùng code mà không hiểu gì hết, có khác gì người mù lái xe hơi trên đường cao tốc.

Cái trên thì mình làm được rồi, ko viết code gì hết. Những item kia của Dropdownlist đều liên kết được với 1 mã của GridView. Nhưng thêm Item "Tất Cả" thì sẽ liên kết với mã nào mà khi chọn vào có thể hiển thị được tất cả các dữ liệu đó bạn à...!!!
Mình cũng muốn hiểu nên mới lên đây hỏi bà con, chứ có code mà ko hiểu thì có tác dụng gì đâu..!!! Cảm ơn bạn nhiều nhé.!

natostr
02-07-2009, 23:36
bác này có vẻ ko rành về SQl nhỉ. Nếu rành thì chỉ cần dùng câu select mà ko có phần where cho table có dữ liệu bạn cần là ok rồi còn gì.

dangquangvl
01-08-2009, 13:03
Các bạn trả lời thì thấy ngon lắm , nhưng hãy làm thử đi rùi biết, dùng select..from rồi nhưng đâu có được, quan trọng là dùng ở đâu nè, cùng nhau giúp bạn ấy đi

trinhdiep
02-08-2009, 08:23
mình hay viết storeprocedure trong sql. nếu điều kiện null thì lấy tất ra. còn bin dữ liệu thì cứ xổ tất từ cái store đó ra là ổn. nên nếu bạn làm theo cách này thì chỉ cần thêm một bản ghi vào drop với giá trị null(empty) là được

nếu mà dùng truy vấn thì bạn phải kiểm tra null(empty) để bỏ mệnh đề where đi.

còn thêm item vào drop thì không biết có cần nói không. hehe. nếu bạn bin lên drop một cách tự động thì đành phải bắt sự kiện để thêm item thôi.

bạn dq_ninh dùng filter thì mình không sử dụng. những gì thuộc về dữ liệu thì để csdl xử lý, càng nhiều càng tốt. hơn nữa mình nghĩ dùng filter sẽ tốn thời gian load trang hơn. (mọi xử lý hoàn tất trước khi render phải không nhỉ. hehe)

sinhviencongnghe
03-08-2009, 09:36
Tui viết 1 store procedure cho bạn nè



create proc udsSelectProduct
@id varchar(5)
as
begin
select * from Products
where ProductId = case @id when '' then ProductId else @id end
end


Vậy là khi bạn chuyền giá trị "" vào thì nó lấy hết product. Nếu chuyển ProductId thì nó chỉ lấy thông tin của productID đó thui

:D

Chúc thành công nhé

dangquangvl
03-08-2009, 17:59
Mình không viết thủ tục trong sql.
trước tiên Dropdownlist lấy từ datasource.
sau đó thêm "--chọn tất cả --" vào bằng cách: vào properties Dropdownlist control, trong phần AppenDataBoundItems chọn yes, sau đó trong mục Items bạn Add thêm ListItem text = "--chọn tất cả --" và value = " 0".

Bây h, muốn Gridview hiện thị hết thì chỉ cần xét trường hợp Dropdownlist selectedValue = "0" thì bạn xét lại DataSource cho Gridview.
Có bạn nào làm theo hướng này như mình không?
Cái mình thắc mắc là mình không thể xét được cái DataSource mới cho Gridview .
Mình viết như sau:
protected void Page_Load(object sender, EventArgs e)
{
if ( DropDownList1.SelectedValue =="0")
{
DataTable dt = LayThongTinNganSach("");
GridView1.DataSource = dt;
GridView1.DataBind();
}
}
public DataTable LayThongTinNganSach(string manhom)
{
string strSQL = "Data Source=.;Initial Catalog=QL_NGANSACH;Integrated Security=True";
SqlConnection Con = new SqlConnection(strSQL);
Con.Open();
string strCMD = "SELECT * FROM NGANSACH ";
SqlCommand cmd = new SqlCommand(strCMD, Con);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dtNS = new DataTable();
da.Fill(dtNS);
return dtNS;

}

trinhdiep
03-08-2009, 23:25
mình nghĩ là bạn cần refresh lai gridview.
GridView1.DataBind();
GridView1.Refresh();
hoặc bạn có thể đặt EnableViewState=false cho GridView1 khi Init hay khi Design

dangquangvl
04-08-2009, 11:14
Thôi, không được.
Mình bỏ, không làm nữa
Mệt rồi
Chắc phải hỏi ông thầy tin học quá.

[=========> Bổ sung bài viết <=========]

refresh và EnableViewState=false cũng đâu có được
Đây là diễn đàn tin học, mình rất mong được học hỏi và trao đổi những thông tin thật chính xác, thông tin các bạn đưa ra chỉ là suy nghĩ sơ lược của các bạn thôi, làm thử đi rồi mới thấy những gì các bạn nói đâu có đúng.

[=========> Bổ sung bài viết <=========]

Mình biết lỗi là do từ khóa để liên kết 2 bảng, nhưng ..

sinhviencongnghe
04-08-2009, 14:26
Chưa gì đã bỏ cuộc rồi, dân tin học mà ngại gì mấy cái problem này, phải solve chứ.

Bạn làm theo cách mình chỉ chưa?

Tui viết 1 store procedure cho bạn nè



create proc udsSelectProduct
@id varchar(5)
as
begin
select * from Products
where ProductId = case @id when '' then ProductId else @id end
end


Vậy là khi bạn chuyền giá trị "" vào thì nó lấy hết product. Nếu chuyển ProductId thì nó chỉ lấy thông tin của productID đó thui

:D

Chúc thành công nhé

Cần gì phải hỏi thầy mấy cái này.

Nếu muốn cách khác nữa thì đây:
- Load lên datatable đi
- Add them item Tat Ca vào Table giá trị là ""
- Khi nguoi dùng chọn dropdownlist thì bạn dựa vào đó mà showdata ===> giải quyết vấn đề chưa?
Không được bỏ cuộc. Cứ như vậy thì tạo thói quen không tốt :D

dangquangvl
04-08-2009, 19:32
ko được, mình là con gái nên thiếu sự kiên nhẫn nhất là trong lĩnh vực này....

trinhdiep
04-08-2009, 21:04
co thầy tội gì mà không hỏi, ngu thế.

natostr
04-08-2009, 23:13
ko được, mình là con gái nên thiếu sự kiên nhẫn nhất là trong lĩnh vực này....

Con gái thì đã sao! Vấn đề này chỉ là 1 vấn đề nhỏ mà không giải quyết nổi thì sau này gặp những vấn đề lớn hơn thì lại khóc àh?
Công việc thế này"
1/ Tạo 1 dropdownlist và add ngay vào đó 1 row "tất cả" với value là "all" sau đó mới bind dữ liệu vào dropdownlist và dữ liệu mặc định vào gridview.
2/ nhấp đôi lên dropdownlist ở phần design để visual studio tạo ra 1 hàm bên code có tên tương tự như funtion dropdownlistchanged(event e, object ob):


funtion dropdownlistchanged(event e, object ob)
{
string query = "select * from desTable";
if(ob.selectedindex.value != 'all')
{
query += " where something='"+ ob.selectedindex.value +"'";
}
//phần còn lại này là phần code thực thi câu query và bind dữ liệu select đc vào gridview
}

Mình hiện không cài visual studio ở đây nên code không chính xác (không đụng tới 1 thời gian rồi). Nhưng ý tưởng và các bước là vậy, bạn chỉ cần chỉnh sửa lại cho đúng là đc.
1 lời khuyên cho bạn: Nếu bạn là người không kiên nhẫn thì nghề này hoàn toàn không thích hợp cho bạn, nên chọn nghề khác thì hay hơn.

Đây chỉ mới là những khó khăn đầu tiên của công việc lập trình này vì đây chỉ mới là làm theo yêu cầu thôi, phần fix lỗi khi sản phẩm đã thành hình mới là cực hình đó bạn.

sinhviencongnghe
05-08-2009, 14:56
co thầy tội gì mà không hỏi, ngu thế.

Vâng, tớ ngu hơn cậu nhiều. Vì tớ phải tự giải quyết công việc của mình, còn cậu thì chỉ có biết hỏi cho xong, phẻ re đúng không?

To người hỏi: Cố gắng thêm nhé, đừng ngại khó. Nếu không làm ra nữa thì đưa mail đây mình giúp cho.

Xem lại đoạn code Page_Load, sai ròi.
Mình thấy code nó sẽ chạy nhiều lần lắm đấy (Kiểm tra IsPostBack) nhé

dangquangvl
05-08-2009, 16:19
Các bạn đừng giận mình. Xin lỗi nhé. Mình ko có ý gì đâu.

[=========> Bổ sung bài viết <=========]

Mình chỉ tính hỏi cho biết thôi, còn được hay ko, ko quan trọng,vì trên đời này có rất nhiều điều mình ko biết mà, thêm 1 điều nữa cũng ko sao. đúng ko? các bạn đừng giận. Có gì cho mình sorry nha.

natostr
05-08-2009, 23:18
Các bạn đừng giận mình. Xin lỗi nhé. Mình ko có ý gì đâu.

[=========> Bổ sung bài viết <=========]

Mình chỉ tính hỏi cho biết thôi, còn được hay ko, ko quan trọng,vì trên đời này có rất nhiều điều mình ko biết mà, thêm 1 điều nữa cũng ko sao. đúng ko? các bạn đừng giận. Có gì cho mình sorry nha.

giận dỗi người dưng chi cho mệt hả bạn :)), mọi người chỉ nói cho bạn biết mà cố gắng thêm thôi.
Đã theo cái nghiệp lập trình này thì kiên nhẫn là quan trọng nhất mà. Làm không ra thì quăng đó đi chơi, qua hôm sau lại tiếp tục với nó là ok.

chang_ngao2001
06-08-2009, 00:38
using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class Dropdowlist_gridview : System.Web.UI.Page
{
private SqlConnection con = new SqlConnection("SERVER=.;database=BANSACH; Integrated Security=true; Pooling=true");
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
LayDM();
LaySachtheoDM("0");
}
}
public void LayDM()
{
SqlDataAdapter da = new SqlDataAdapter("Select * from DANHMUC", con);
DataSet ds = new DataSet();
da.Fill(ds, "DM");
DropDownList1.DataSource = ds.Tables[0];
DropDownList1.DataTextField = ds.Tables[0].Columns["TEN"].ToString();
DropDownList1.DataValueField = ds.Tables[0].Columns["ID"].ToString();
DropDownList1.DataBind();
}
public void LaySachTheoDM(string id)
{
SqlCommand cmd=new SqlCommand();
if(id=="0")
cmd.CommandText="Select * from SACH";
else
cmd.CommandText="Select * from SACH where danhmuc_ID='"+id+"'";
SqlDataAdapter da = new SqlDataAdapter(cmd.CommandText,con);
DataSet ds = new DataSet();
da.Fill(ds, "SACH");
GridView1.DataSource = ds.Tables[0];
GridView1.DataBind();
}
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
LaySachTheoDM(DropDownList1.SelectedItem.Value.ToS tring());
}

}


__________________________________
DropDownList1 Add thêm một item Text:"tất cả" và cho value = 0
set thuộc tính:
AppendDataBoundItems =true
AutoPostBack = true;
___________________________________
Chúc thành công

demonhva
06-08-2009, 02:48
Mọi người quả thật là nhiệt tình, cám ơn các bạn đã chỉ bảo. :D

dangquangvl
07-08-2009, 11:45
Mình sẽ cố gắng kiên nhẫn, bình tỉnh trong mọi việc. Cảm ơn các bạn đã có những lời khuyên...Mình làm xong rồi...và biết được lỗi ở đâu rồi...do lúc đầu mình đã tạo 1 datasource bằng lệnh control, lại kô xóa khi viết code thành ra...

natostr
07-08-2009, 14:32
Đừng chỉ dựa vào những thứ cao cấp mà visual studio cung cấp (nhất là những thứ thuộc dạng kéo thả) mà nên dùng nó như 1 cách để tham khảo code thì hay hơn. Đôi lúc tự mình code chay cũng giúp bạn hiểu ra được nhiều điều.

dangquangvl
07-08-2009, 20:13
Mình đồng ý là viết code sẽ giúp mình hiểu hơn nhiều..nhưng bạn có công nhận là sự tiến bộ... trong mọi lĩnh vực... kéo theo mọi thứ càng đơn giản hơn cho chúng ta hay sao?...

natostr
07-08-2009, 22:44
Mình đồng ý là viết code sẽ giúp mình hiểu hơn nhiều..nhưng bạn có công nhận là sự tiến bộ... trong mọi lĩnh vực... kéo theo mọi thứ càng đơn giản hơn cho chúng ta hay sao?...

đúng vậy, đơn giản và còn khuyến mãi thêm sự phụ thuộc vào nó nếu không biết cách tận dụng cho đúng đó bạn. Như trường hợp ở trên, khi mà cái có sẵn đó không đủ đáp ứng yêu cầu của bạn, bạn đã mất bao lâu để giải quyết vấn đề?! (chưa kể là bạn đã có ý bỏ cuộc :)). Khi mới bước chân vào nghề lập trình thì nên đọc và viết nhiều hơn là kéo và thả cho xong vấn đề bạn ạh.

Topic này cũng nên kết thúc ở đây nhé, vấn đề của bạn đã xong. Bàn thêm chỉ loãng mà thôi. Chúc bạn cố gắng.