2012-03-07 39 views
5

Tôi muốn biết làm cách nào để có được tên cột từ chế độ xem lưới? bởi số của nó không theo tên. như: Tên | Tuổi | Ngày sinh: (vì vậy name = 0, age = 1 etc ...)Cách lấy tên cột từ GridView?

cảm ơn.

Trả lời

11

Bạn có thể nhận được nó như thế này:

gv.HeaderRow.Cells[i].Text 

Hoặc như thế này:

gv.Rows[0].Cells[i].Text 

Rows [0] nên dòng tiêu đề của bạn.

+4

Đừng quên đánh dấu nó là aswer vui lòng: D – JoRouss

+2

37 phút sau và không có câu trả lời nào được đánh dấu. Có thể thông báo này sẽ nhắc nhở họ. – Khan

+0

hi Tôi đã thử và tôi chỉ nhận được số, tôi cần lấy tên cột –

2

đơn giản

GridView1.Rows[0].Cells[0].Text; 

thử này nếu bạn muốn tất cả các giá trị các tế bào từ mỗi của các hàng

foreach (GridViewRow r in GridView1.Rows) 
    { 
     string s = r.Cells[0].Text; 
     string y = r.Cells[1].Text; 
    } 

update:

thử này

foreach (TableCell Tc in GridView1.HeaderRow.Cells) 
    { 
     //if you are not getting value than find childcontrol of TabelCell. 
     string sssb = Tc.Text; 
     foreach (Control ctl in Tc.Controls) 
     { 

      //Child controls 
      Label lb = ctl as Label; 
      string s = lb.Text; 
     } 
    } 
+0

hi Tôi đã cố gắng và tôi chỉ nhận được số lượng, tôi cần để có được tên cột –

+0

có thể là tế bào cột của bạn trong childcontrol trên HeaderRow.try mã cập nhật của tôi. Và cho tôi biết những gì xảy ra? – Jigs

+0

Tôi nhận tham chiếu đối tượng không được đặt thành một phiên bản của chuỗi đối tượng s = lb.text –

0

Đây không phải là câu trả lời cho câu hỏi. Nó chỉ là câu trả lời nếu bạn không bao giờ thay đổi văn bản tiêu đề trong GridView. Người hỏi câu hỏi muốn lấy tên trường cơ sở dữ liệu theo chỉ mục.

Tôi đã nhìn thấy một số "câu trả lời", mà chỉ cung cấp các văn bản trong hàng đã chọn của một GridView, hoặc văn bản tiêu đề mà cả hai không trả lời các câu hỏi đã được ...

Bạn có thể hỏi tại sao? Nếu bạn định kiểm tra cập nhật trong hệ thống và muốn so sánh giá trị cũ và giá trị mới và chỉ cập nhật nếu chúng thay đổi và muốn chỉ định trường nào đã được cập nhật cách bạn hiển thị tên trường bảng cơ sở dữ liệu tại chỉ mục vòng lặp.

Ví dụ:

Protected Sub gv_RowUpdating(sender As Object, e As System.Web.UI.WebControls.GridViewUpdateEventArgs) 
    Dim intValCount As Integer = Integer.Parse(e.NewValues.Count) 
    If intValCount > 0 Then 
     Dim i As Integer = 0 
     For i = 0 To intValCount - 1 
      If Not e.OldValues(i).Equals(e.NewValues(i)) Then 
       ' values have changed, audit the change 
       Sys.Audits.General(intID, "the_database_table", <the table field by index(i)>, e.OldValues(i).ToString, e.NewValues(i).ToString) 
      End If 
      i += 1 
     Next 
    End If 
End Sub 

Vì vậy, câu hỏi là làm thế nào để bạn có được tên trường bảng cơ sở dữ liệu theo chỉ số thông qua mã phía sau? Tôi cũng đã tìm kiếm điều này và tất cả các "câu trả lời" mà tôi đã nhìn thấy không phải là câu trả lời mà tôi nghĩ rằng một số người trong chúng ta đang thực sự tìm kiếm. Tất cả các phương pháp đã đề cập mà tôi đã thấy ở đây không phải là các tham chiếu bằng chứng bullet cho tên trường bảng cơ sở dữ liệu.

3
//// Header column names 
int gridViewCellCount = yourGridView.Rows[0].Cells.Count; 
// string array to hold grid view column names. 
string[] columnNames = new string[gridViewCellCount]; 

for (int i = 0; i < gridViewCellCount; i++) 
{ 
    columnNames[i] = ((System.Web.UI.WebControls.DataControlFieldCell)(yourGridView.Rows[0].Cells[i])).ContainingField.HeaderText; 
} 
1

Xem lại câu hỏi cũ .... có thể lấy tên trường dữ liệu được liên kết với GridView bằng loại mã này. Điều này làm cho một từ điển của colnum và tên trường.

private static IDictionary<int, string> GetGridViewFieldNames(object grid) 
{ 
    var names = new Dictionary<int, string>(); 
    var view = grid as GridView; 
    if (view != null) { 
     for (var i = 0; i < view.Columns.Count; i++) { 
      var field = view.Columns[i] as BoundField; 
      if (field != null) { 
       names.Add(i, field.DataField); 
      } 
     } 
    } 
    return names; 
} 
+0

Chỉ trả lời ở đây có một đâm vào tên trường thay vì văn bản nhãn cột. –

0

Dễ dàng: Ở đây tôi đọc văn bản tiêu đề GridView cho mỗi ô tiêu đề và thêm chúng dưới dạng cột mới vào bảng dữ liệu.

DataTable dt = new DataTable(); 
foreach(DataControlFieldHeaderCell column in yourGridview.HeaderRow.Cells) 
{ 
    dt.Columns.Add(column.Text.Trim().Replace(" ", ""));       
} 

//Make sure you do all this after yourGridview.DataBind(); 
//If you do not want to bind data first simply bind an empty list like so: 
/* yourGridview.DataSource = new List<string>(); 
    yourGridview.DataBind(); */ 
Các vấn đề liên quan