2013-03-11 5 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

попробуйте использовать для цикла после того, как закончите в своем коде, как я использовал в своем ответе. – Freelancer

+1

вы можете кэшировать свою таблицу данных перед связыванием и извлекать данные с помощью кэшированного dt. –

+0

Пожалуйста, посмотрите мой отредактированный ответ. Третья альтернатива – Freelancer

ответ

1

Использовать следующий код >>

Если Windows App >>

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

+0

У вас есть вторая альтернатива? – Freelancer

+0

да, а затем я получаю сообщение об ошибке: «System.Web.UI.WebControls.GridViewRow» не содержит определения для «Строки» и никакого метода расширения «Строки», принимающего первый аргумент типа «System.Web». UI.WebControls.GridViewRow 'можно найти (вам не хватает директивы using или ссылки на сборку?) «... пытаюсь найти решение для этого, но ничего полезного ... может быть, что элемент управления является gridview и затем используется datatable для добавления необходимых столбцов и строк? – Kerieks

Смежные вопросы