2013-02-12 59 views
2

我試圖將自動編號列插入到C#中的datagridview控件中。我無法更改GridView中的列值

一切正常,但我不能寫任何東西到列。它仍然是空的。

我該如何解決這個問題?

下面是我的代碼(GRV - GridView控件,DS-數據集):

 grv1.AutoGenerateColumns = false; 
     grv1.DataSource = ds.Tables[0];   
     grv1.Columns[0].DataPropertyName = "LastName"; 


     DataGridViewTextBoxColumn nrCol = new DataGridViewTextBoxColumn(); 
     nrCol.Name = "Nr"; 
     nrCol.HeaderText = "Nr"; 
     grv.Columns.Insert(0, nrCol); 
     grv.Columns[0].ReadOnly = false; 


     for (int i=0;i<grv.Rows.Count;i++) 
     { 
      grv.Rows[i].Cells[0].Value = i.ToString();  
     } 

回答

2

你有你的網格行?我看到添加了一列的代碼,以及爲每個當前行更改字段的循環,但我看不到添加行的代碼。

您需要撥打grv.Rows.Add(...)並在循環中預先填寫DataGridViewRow

+0

是的,我的行,這是從數據集中讀取:grv1.DataSource = ds.Tables [0]; – RRM 2013-02-13 09:59:50

+0

然後我建議你更新你的代碼示例以匹配你使用的實際代碼。 – 2013-02-13 10:35:24

1

我認爲你需要find the controlassign the value to the Text property of TextBox control(不細胞)綁定數據源後;單元格的值可能是不可見的,因爲文本框是覆蓋它...

//your code here 
... 
//assign data source (if you have any) 
grv.DataSource = YourDataSource; 
//bind the gridview 
grv.DataBind(); 

//now you can loop through the gridview as below 
for (int i=0;i<grv.Rows.Count;i++) 
{ 
    TextBox txt = (TextBox)grv.Rows[i].FindControl("Nr"); 
    txt.Text = i.ToString(); 
} 

或者可以如下做到這一點整齊;

後面的代碼:

//define index variable in the code behind 
protected int index = 1; 

HTML:

<!--Add this column to the GridView with your text box --> 
<asp:TemplateField> 
    <ItemTemplate> 
     <asp:TextBox runat="server" ID="Nr" text='<%# index ++ %>'></asp:TextBox> 
    </ItemTemplate> 
</asp:TemplateField> 
+0

對不起,我忘了說它是桌面應用程序,而不是ASP.NET。我沒有可用的DataBind或FindControl等方法 – RRM 2013-02-13 09:58:31

+0

在這種情況下,您應該在添加列和循環前分配數據源。 – Kaf 2013-02-13 10:07:34

0

如果我是正確的,你有Person表或類似的東西。您不需要爲該表創建autonumber,只需從數據庫中設置該表的primary keyauto-increment = true並完成。

UPDATE

剛剛看了你的評論,這是你的問題很好的解決方案。 ROW_NUMBER

+0

這是真的,但我在SQL服務器上使用我的表中的一些記錄選擇並按名稱排序。如果我使用表鍵我會有像5467,3412,7896等數字,我想它是1,2,3 – RRM 2013-02-13 10:05:06

+0

我更新了我的答案 – spajce 2013-02-13 10:09:59

0

感謝人們,我自己用一種骯髒的方式解決了這個問題。

這ROWNUMBER是很方便的,我把它添加到我的招數;)

但我所做的這段時間內我創建的DataGrid collumn結合,從數據集中一些隨機collumn。當它被解約時,我什麼都不能寫。當它被結合我容易改寫的值

grv1.AutoGenerateColumns = false; 
    grv1.DataSource = ds.Tables[0];   
    grv1.Columns[0].DataPropertyName = "LastName"; 


    DataGridViewTextBoxColumn nrCol = new DataGridViewTextBoxColumn(); 
    nrCol.Name = "Nr"; 
    nrCol.HeaderText = "Nr"; 
    grv1.Columns.Insert(0, nrCol); 
    grv1.Columns[0].ReadOnly = false; 

    //!!!!!!!!!!!!!!!!!!!!!! 
    grv1.Columns[0].DataPropertyName = "Postal code"; //or whatever existing column 


    for (int i=0;i<grv.Rows.Count;i++) 
    { 
     grv.Rows[i].Cells[0].Value = i.ToString();  
    }