2013-03-11 122 views
1

我有一個gridview,我試圖提取數據來填充3個文本框......我已經嘗試了很多方法,但我無法達到正確的方式這...我已經手動構建了gridview,因此它沒有「editTemplate」...有人能指導我以正確的方式做到這一點嗎? 這是我的GridView的樣子:從gridview提取數據到文本框

<asp:GridView ID="GridView1" runat="server" AllowPaging="True" 
           EmptyDataText="No parts has been added to the model, please add a part." 
           BorderColor="Black" BorderStyle="Solid" BorderWidth="2px" 
           CellPadding="3" onrowcommand="GridView1_RowCommand"> 
           <Columns> 
           <asp:TemplateField HeaderText=""> 
           <ItemTemplate> 
            <asp:LinkButton ID="EditButton" runat="server" CssClass="EditButton" CommandName="Edit" Text="Edit" /> 
           </ItemTemplate> 
           </asp:TemplateField> 
           <asp:TemplateField HeaderText=""> 
           <ItemTemplate> 
            <asp:LinkButton ID="DeleteButton" runat="server" CssClass="DeleteButton" CommandName="Delete" Text="Delete" /> 
           </ItemTemplate> 
           </asp:TemplateField> 
           </Columns> 
          <HeaderStyle BackColor="#FFFFCC" BorderColor="Black" BorderStyle="Solid" 
           BorderWidth="2px" /> 
         </asp:GridView> 

那麼這是怎麼了,我添加了必要的列到GridView控件:

 protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     dt = new DataTable(); 
     MakeDataTable(); 
     EmptyDataString(); 
    } 
    else 
    { 
     dt = (DataTable)ViewState["DataTable"]; 
    } 
    ViewState["DataTable"] = dt; 

} 

#region GridView 

private void EmptyDataString() 
{ 
    TemplateBuilder tmpEmptyDataTemplate = new TemplateBuilder(); 
    tmpEmptyDataTemplate.AppendLiteralString("No parts has been added to the model, please add a part."); 
    GridView1.EmptyDataTemplate = tmpEmptyDataTemplate; 
    GridView1.DataBind(); 
} 

private void MakeDataTable() 
{ 
    dt.Columns.Add("Item"); 
    dt.Columns.Add("Quantity"); 
    dt.Columns.Add("Price P/Quantity"); 
} 

private void AddToDataTable() 
{ 
    DataRow dr = dt.NewRow(); 
    dr["Item"] = txtPart.Text; 
    dr["Quantity"] = numQuantity.Text; 
    dr["Price P/Quantity"] = txtPricePQ.Text; 
    dt.Rows.Add(dr); 
} 

private void BindGrid() 
{ 
    GridView1.DataSource = dt; 
    GridView1.DataBind(); 
} 

protected void btnAddPart_Click(object sender, EventArgs e) 
{ 
    AddToDataTable(); 
    BindGrid(); 
    ClearNewParts(); 
} 
#endregion 

而且這些都是我試圖做一些這方面的方法(所有被註釋掉了,因爲我轉移到下一個辦法做到這一點.....

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) 
{ 
    // int index = Convert.ToInt32(e.CommandArgument); 
    if (e.CommandName == "Edit") 
    { 
     if (GridView1.SelectedRow != null) 
     { 
      //dataTable.Rows[GridView1.SelectedRow].BeginEdit(); 
      //dataTable.Rows[GridView1.SelectedRow]["yourFieldName"] = newValue; 
      //dataTable.Rows[GridView1.SelectedRow].EndEdit(); 
      //gridView.DataSource = dataTable; 
     } 
     // GridViewRow row = GridView1.Rows[e.RowIndex]; 

     // Department = ((GridViewRow(((LinkButton)e.CommandSource).NamingContainer)).Cells[2].Text; 
     // txtPart.Text = GridView1.SelectedRow.Cells[1].Text; 
     // txtPart.Text = GridView1.Rows[index].Cells[2].Text; 
     // Response.Write(gv.Rows[index].Cells[0].Text); //consider you use bound field and the column you want to show its value is the first column. 
    } 

我知道我做錯事的我如何努力實現提取數據出來gridvie的w填充文本框,但不知道如何....(我仍然是一個初級編程,基本上是第一次做我在這裏試圖達到的目標)......

+0

嘗試使用for循環之後,如果在您的代碼完成,如我在我的答案中使用。 – Freelancer 2013-03-11 08:02:55

+1

您可以在綁定之前緩存您的dataTable,並使用緩存的dt檢索數據。 – 2013-03-11 08:04:09

+0

請看我編輯的答案。第三選擇 – Freelancer 2013-03-11 08:06:26

回答

1

使用以下代碼>>

如果Windows應用程序>>

for(int i=0;i<gv.Rows.Count;i++) 
{ 
     id=gv.selectedRows[i].cells[0][0].value.toString(); 
     name=gv.selectedRows[i].cells[0][0].value.toString(); 
} 

從GridView控件這個否則

您可以獲取所選行。

如果不想選擇,那麼,

for(int i=0;i<gv.Rows.Count;i++) 
    { 
      id=gv.Rows[i].cells[0][0].value.toString(); 
      name=gv.Rows[i].cells[0][0].value.toString(); 
    } 

第三種選擇>>

 if (e.CommandName == "Edit") 
     { 
      if (GridView1.SelectedRow != null) 
      { 
       //dataTable.Rows[GridView1.SelectedRow].BeginEdit(); 
       //dataTable.Rows[GridView1.SelectedRow]["yourFieldName"] = newValue; 
       //dataTable.Rows[GridView1.SelectedRow].EndEdit(); 
       //gridView.DataSource = dataTable; 
      } 
      // GridViewRow row = GridView1.Rows[e.RowIndex]; 
    for(int i=0;i<GridView1.Rows.Count;i++) 
{ 
      Department = ((GridViewRow(((LinkButton)e.CommandSource).NamingContainer)).Cells[2].Text; 
      txtPart.Text = GridView1.SelectedRow[i][0].Cells[1].Text; 
      txtPart.Text = GridView1.Rows[i][0].Cells[2].Text; 
      Response.Write(gv.Rows[i][0].Cells[0].Text); //consider you use bound field and the column you want to show its value is the first column. 
     } 
} 

而且可以設置這些變量爲文本框。

或者直接也可以設置它。

試用。

+0

謝謝你的回答!但是我得到一個錯誤「System.Web.UI.WebControls.GridView」沒有包含「selectedRows」的定義,也沒有擴展方法「selectedRows」接受類型爲「System.Web.UI.WebControls」的第一個參數.GridView「可以找到(你是否缺少using指令或程序集引用?)」...我嘗試過的方法之一出現此錯誤,但不知道如何解決它? – Kerieks 2013-03-11 07:40:36

+0

你有沒有嘗試過第二種選擇? – Freelancer 2013-03-11 07:53:39

+0

是的,然後我得到一個錯誤,說:「System.Web.UI.WebControls.GridViewRow'不包含'行'的定義,並沒有擴展方法'行'接受類型'System.Web的第一個參數。 UI.WebControls.GridViewRow'可以找到(你是否缺少使用指令或程序集引用?)「...試圖尋找一個解決方案,但沒有什麼有用的......它可能是該控件是一個gridview然後使用數據表添加必要的列和行? – Kerieks 2013-03-11 07:59:38