Thắc mắc về vấn đề xài id nhưng hiển thị tên của database trong C#

Chào cả nhà, cho mình hỏi, mình đang tìm hiểu về dạng như thế này:
có 2 table:
Khách hàng(id, tên khách hang, doanh nghiệp ID,)
Doanh nghiệp(id. tên doanh nghiệp)
Làm trên C# thì làm sao để phần mục Doanh nghiệp ID( table khách hàng ) sử dụng ID của table doanh nghiệp, nhưng hiển thị tên của doanh nghiệp đó (tương ứng với ID).
Cả nhà cho mình hỏi đó là dạng gì, muốn tìm hiểu thì kiếm tên như thế nào ạ

Cái này là sql statement thôi chứ đã leo lên phần program đâu

Bạn thiết kế table theo relationship thì sẽ gọi được one-to-many thôi
Còn hiển thị thì dùng cái join và alias trong sql statement

2 Likes

thanks bạn nhiều…

Mình không hiểu lắm, phiền bạn có thể cho mình link ví dụ ko ạ

JOIN là để gộp nội dung ở nhiều bảng lại trong 1 query statement result.

Bạn xem JOIN ở đây:

https://www.w3schools.com/sql/sql_join.asp

Alias thì như tên gọi của nó, là 1 tên giả, giả sử cột đó tên ban đầu là id_khach_hang thì sau khi dùng alias as sẽ chuyển thành name_khach_hang và ở trong array trả về sẽ có dạng y như vậy.

https://www.w3schools.com/sql/sql_alias.asp

1 Like

Cảm ơn bạn nhiều!!!

Ấy chết, đặt tên cho bạn bè hiểu mình thì đặt như thế còn làm thực tế thì hơi phiền nhé bạn
theo mình nên đặt tên không dấu

khach_hang(id, ten_khach,doanh_nghiep_id)
doanh_nghiep(id,ten_doanh_nghiep)

thường thì nên bỏ luôn cái sau -->

khach_hang(id, ten,doanh_nghiep_id)
doanh_nghiep(id,ten)

hix, xem có gọn hơn không

Khi hiển thị theo yêu cầu của bạn thì bạn query như sau

select kh.id as Mã khách hàng, kh.ten as Tên khách, dn.ten as Tên doanh nghiệp
from khach_hang kh, doanh_nghiep dn
where dn.id=kh.doanh_nghiep_id

ok chưa?

Vậy là đưa lên grid thôi. Võ vẽ vài dòng như thế có gì sai thì bạn sửa lại nhé, lâu quá rồi không làm C#
ý quên nói nhỏ bạn nhé, mấy thầy ở trường thì dạy làm thế, nhưng hiện nay dân giang hồ họ không còn chơi cái này nữa đâu…

1 Like

Cảm ơn bạn nhiều… :blush:

Chào bạn, phiền bạn cho mình hỏi thêm ạ, khi hiển thị lên gridview nên làm gì để hiển thị tên thay vì ID ạ
Xin cảm ơn bạn nhiều

    string connetionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=your .mdb file;";
    string sql = "SELECT * FROM Authors";
    OleDbConnection connection = new OleDbConnection(connetionString);
    OleDbDataAdapter dataadapter = new OleDbDataAdapter(sql, connection);
    DataSet ds = new DataSet();
    connection.Open();
    dataadapter.Fill(ds, "Authors_table");
    connection.Close();
    dataGridView1.DataSource = ds;
    dataGridView1.DataMember = "Authors_table";

Cái query kia sẽ ra kết quả đó bạn.

Khi bạn viết cứ post code lên mọi người sẽ chỉ điểm cho, còn nói chay thì khó cho hai bên.

Nhưng mặc định bạn quất cái DataSource là nó hiển thị cái query kia, các alias sẽ nhảy lên header.

1 Like

Sorry bạn mình không biết áp dụng vô trường hợp mình :pensive:

private void showData()
        {
            DatactyDataContext db = new DatactyDataContext();
            var customerlist = db.khach_hangs.ToList();
            gcCustomers.DataSource = customerlist;
        }

Đây là code mình sử dụng show lên gridview :disappointed_relieved:

uh, bạn xài linq…sao lại không ra và hiện tại nó ra cái gì???

Vấn đề của bạn là các truy vấn linq đúng không, hãy xem ví dụ dưới và tự áp dụng nhé

var teacherGroup = from t in context.Teachers
                                join g in context.Groups on t.ID equals g.TeacherID
                                where num == t.ID
                                select new {
                                  t.Id ,
                                  g.Name,
                                  t.xxxx 
                                 };

and then

xxxx.DataSource = teacherGroup;

Muốn cái field thành header thì phải làm thế này

class ProjectInfo
{
   public string Name {get; set; }
   public long Id {get; set; }
}

public List<ProjectInfo> GetProjectForCombo()
{
    using (MyDataContext db = new MyDataContext (DBHelper.GetConnectionString()))
    {
        var query = from pro in db.Projects
                    select new ProjectInfo(){ Name = pro.ProjectName, Id = pro.ProjectId };

        return query.ToList();
    }
}

cái default của datagrid thì thế thôi còn muốn uyển chuyển hơn , bạn phải dùng template :grinning:

1 Like

thanks bạn nhiều, mình làm đc rồi

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?