我用GridView控件绑定了一个数据库表,但是其中的一个字段我想用另一个表的字段内容来替换显示,我用了DropDownList来进行绑定,可是不管用,有没有什么方法让这个绑定的字段显示在表中,或者有其它更好的办法?

解决方案 »

  1.   

    一、两表没关联
    那你将两个表加到同一个DataSet里面,把GridView的DataSource设定为dataset
    将你要的字段替换,再绑定。
    GridView1.DataSource=dataset;
    GridView1.DataBind();二、两表关联
    可用以下方法合并两DataTable,把GridView的DataSource设定为datatable,将你要的字段替换,再绑定。
    public enum JoinType { LeftJoin,InnerJion };/// <summary>
            /// 聯接兩個DataTable
            /// </summary>
            /// <param name="dt1">FirstDataTable</param>
            /// <param name="dt2">SecondDateTable</param>
            /// <param name="ColuName1">the columnName in FirstDataTable that use in connection.Exp: comp,dept</param>
            /// <param name="ColuName2">the columnName in SecondDateTable that use in connection.Exp: comp,dept</param>
            /// <param name="Mark">true:SecondDT移除行(InnerJion);false:SecondDT不移除行(LeftJoin)</param>
            /// <param name="type"></param>
            /// <returns></returns>
            public static DataTable ConnectTwoTable(DataTable FirstDT, DataTable SecondDT, string ColuName1, string ColuName2, bool Mark,JoinType JType )
            {
                try
                {
                    DataTable dt1 = FirstDT.Copy();
                    DataTable dt2 = SecondDT.Copy();
                    string[] Names1 = ColuName1.Trim().Split(',');
                    string[] Names2 = ColuName2.Trim().Split(',');
                    //確保ColuName1與ColuName2是不同的
                    string dtmNow = DateTime.Now.ToString("yyyyMMddhhmmss");
                    for (int i = 0; i < Names2.Length; i++)
                    {
                        string Name1 = Names1[i].ToString().Trim();
                        Names1[i] = Name1;
                        string Name2 = Names2[i].ToString().Trim();
                        dt2.Columns[Name2].ColumnName = Name2 + dtmNow;
                        Names2[i] = Name2 + dtmNow;
                    }
                    int FirstColuNum = dt1.Columns.Count;
                    dt1.BeginLoadData();
                    foreach (DataColumn colu2 in dt2.Columns)
                    {
                        if (dt1.Columns.Contains(colu2.ColumnName))
                            colu2.ColumnName += "_Second";//同名列加後綴"_Second"標示,已示區別.
                        dt1.Columns.Add(colu2.ColumnName, colu2.DataType);//不同名的列添加到dt1中.
                    }
                    int LastColuNum = dt1.Columns.Count;
                    List <DataRow> list= new List<DataRow>();
                    foreach (DataRow dt1Row in dt1.Rows)
                    {
                        string strSelect = string.Empty;
                        for (int j = 0; j < Names2.Length; j++)
                        {
                            string conText = dt1Row[Names1[j].ToString()].ToString();
                            strSelect += Names2[j].ToString() + "='" + conText + "' and ";
                        }
                        strSelect = strSelect.Substring(0, strSelect.Length - 5);
                        DataRow[] dt2Rows = dt2.Select(strSelect);
                        if (dt2Rows.Length > 0)
                        {
                            foreach (DataRow dt2Row in dt2Rows)
                            {
                                for (int i = FirstColuNum; i < LastColuNum; i++)
                                {
                                    dt1Row[i] = dt2Row[i - FirstColuNum];
                                }
                                if (Mark)
                                    dt2.Rows.Remove(dt2Row);//移除已使用過的行
                            }
                        }
                        else
                        {
                            list.Add(dt1Row);
                        }
                    }
                    if (JType == JoinType.InnerJion)
                    {
                        foreach (DataRow row in list)
                        {
                            dt1.Rows.Remove(row);
                        }
                    }
                    for (int k = 0; k < Names2.Length; k++)
                    {
                        dt1.Columns.Remove(Names2[k].ToString());
                    }
                    dt1.EndLoadData();
                    return dt1;
                }
                catch (Exception ex)
                {
                    throw new Exception("the columnName is not in table" + ex.Message);
                }
            }
        }
      

  2.   

    两表之间的那个数据如果没什么关联  又想一起显示到datagridview中  建议用视图   再显示倒控件中
    我感觉这个方法比较快捷