2011-01-18 18 views
0

私のコードを教えてください。私は2グリッドビューを持っています。最初のグリッドビューでは、ユーザーは自分が望むすべての行をチェックボックスで選択できます。これらの行は、2番目のグリッドビューで転送されます。これらのすべての私のコードは、それらをうまくやっています。今、私は値を変更するには、2番目のグリッドビューの数量の列を編集したいが、私は編集ボックスに書き込む必要があるか分からない。ここで が私のコードです:グリッドビューの行を編集

using System; 
using System.Data; 
using System.Data.SqlClient; 
using System.Configuration; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Web.UI.HtmlControls; 
using System.Collections; 

public partial class ShowLand : System.Web.UI.Page 
{ 

    protected void Page_Load(object sender, EventArgs e) 
    { 


     if (!IsPostBack) 
     { 
      BindPrimaryGrid(); 
      BindSecondaryGrid(); 

     } 
    } 
    private void BindPrimaryGrid() 
    { 
     string constr = ConfigurationManager.ConnectionStrings["conString"].ConnectionString; 
     string query = "select * from Land"; 
     SqlConnection con = new SqlConnection(constr); 
     SqlDataAdapter sda = new SqlDataAdapter(query, con); 
     DataTable dt = new DataTable(); 
     sda.Fill(dt); 
     gridview2.DataSource = dt; 
     gridview2.DataBind(); 
    } 



    private void GetData() 
    { 
     DataTable dt; 
     if (ViewState["SelectedRecords1"] != null) 
      dt = (DataTable)ViewState["SelectedRecords1"]; 
     else 
      dt = CreateDataTable(); 
     CheckBox chkAll = (CheckBox)gridview2.HeaderRow 
          .Cells[0].FindControl("chkAll"); 
     for (int i = 0; i < gridview2.Rows.Count; i++) 
     { 
      if (chkAll.Checked) 
      { 
       dt = AddRow(gridview2.Rows[i], dt); 
      } 
      else 
      { 
       CheckBox chk = (CheckBox)gridview2.Rows[i] 
           .Cells[0].FindControl("chk"); 
       if (chk.Checked) 
       { 
        dt = AddRow(gridview2.Rows[i], dt); 
       } 
       else 
       { 
        dt = RemoveRow(gridview2.Rows[i], dt); 
       } 
      } 
     } 
     ViewState["SelectedRecords1"] = dt; 
    } 
    private void SetData() 
    { 
     CheckBox chkAll = (CheckBox)gridview2.HeaderRow.Cells[0].FindControl("chkAll"); 
     chkAll.Checked = true; 
     if (ViewState["SelectedRecords1"] != null) 
     { 
      DataTable dt = (DataTable)ViewState["SelectedRecords1"]; 
      for (int i = 0; i < gridview2.Rows.Count; i++) 
      { 
       CheckBox chk = (CheckBox)gridview2.Rows[i].Cells[0].FindControl("chk"); 
       if (chk != null) 
       { 
        DataRow[] dr = dt.Select("id = '" + gridview2.Rows[i].Cells[1].Text + "'"); 
        chk.Checked = dr.Length > 0; 
        if (!chk.Checked) 
        { 
         chkAll.Checked = false; 
        } 
       } 
      } 
     } 
    } 
      private DataTable CreateDataTable() 
       { 
        DataTable dt = new DataTable(); 
        dt.Columns.Add("id"); 
        dt.Columns.Add("name"); 
        dt.Columns.Add("price"); 
        dt.Columns.Add("quantity"); 
        dt.Columns.Add("total"); 
        dt.AcceptChanges(); 
        return dt; 
       } 
    private DataTable AddRow(GridViewRow gvRow, DataTable dt) 
    { 
    DataRow[] dr = dt.Select("id = '" + gvRow.Cells[1].Text + "'"); 
    if (dr.Length <= 0) 
    { 
     dt.Rows.Add(); 
     dt.Rows[dt.Rows.Count - 1]["id"] = gvRow.Cells[1].Text; 
     dt.Rows[dt.Rows.Count - 1]["name"] = gvRow.Cells[2].Text; 
     dt.Rows[dt.Rows.Count - 1]["price"] = gvRow.Cells[3].Text; 
     dt.Rows[dt.Rows.Count - 1]["quantity"] = gvRow.Cells[4].Text; 
     dt.Rows[dt.Rows.Count - 1]["total"] = gvRow.Cells[5].Text; 
     dt.AcceptChanges(); 
    } 
    return dt; 
    } 

    private DataTable RemoveRow(GridViewRow gvRow, DataTable dt) 
    { 
    DataRow[] dr = dt.Select("id = '" + gvRow.Cells[1].Text + "'"); 
    if (dr.Length > 0) 
    { 
     dt.Rows.Remove(dr[0]); 
     dt.AcceptChanges(); 
    } 
    return dt; 
    } 

    protected void CheckBox_CheckChanged(object sender, EventArgs e) 
    { 
    GetData(); 
    SetData(); 
    BindSecondaryGrid(); 
    } 

    private void BindSecondaryGrid() 
    { 
    DataTable dt = (DataTable)ViewState["SelectedRecords1"]; 
    gridview3.DataSource = dt; 
    gridview3.DataBind(); 
    } 
    } 

とソースコードが

ある
<asp:GridView ID="gridview2" runat="server" AutoGenerateColumns="False" 
DataKeyNames="id" DataSourceID="SqlDataSource5"> 
<Columns> 
    <asp:TemplateField> 
    <HeaderTemplate> 
    <asp:CheckBox ID="chkAll" runat="server" onclick = "checkAll(this);" 
        AutoPostBack = "true" OnCheckedChanged = "CheckBox_CheckChanged"/> 
    </HeaderTemplate> 
    <ItemTemplate> 
     <asp:CheckBox ID="chk" runat="server" onclick = "Check_Click(this)" 
       AutoPostBack = "true" OnCheckedChanged = "CheckBox_CheckChanged" /> 
    </ItemTemplate> 
    </asp:TemplateField> 

    <asp:BoundField DataField="id" HeaderText="id" InsertVisible="False" 
      ReadOnly="True" SortExpression="id" /> 

    <asp:BoundField DataField="name" HeaderText="name" 
      SortExpression="name" /> 

    <asp:BoundField DataField="price" HeaderText="price" SortExpression="price" /> 

    <asp:BoundField DataField="quantity" HeaderText="quantity" 
      SortExpression="quantity" /> 

    <asp:BoundField DataField="total" HeaderText="total" SortExpression="total" /> 
</Columns> 
</asp:GridView> 

<asp:SqlDataSource ID="SqlDataSource5" runat="server" 
    ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
    SelectCommand="SELECT * FROM [Land]"></asp:SqlDataSource> 
    <br /> 
    </div> 
<div> 

<asp:GridView ID="gridview3" runat="server" 
    AutoGenerateColumns = "False" DataKeyNames="id" 
    EmptyDataText = "No Records Selected" > 
<Columns> 
    <asp:BoundField DataField = "id" HeaderText = "id" /> 
    <asp:BoundField DataField = "name" HeaderText = "name" ReadOnly="True" /> 
    <asp:BoundField DataField = "price" HeaderText = "price" 
     DataFormatString="{0:c}" ReadOnly="True" /> 
    <asp:TemplateField HeaderText="quantity"> 
    <EditItemTemplate> 
    <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("quantity")%>'</asp:TextBox> 
    </EditItemTemplate> 
    <ItemTemplate> 
    <asp:Label ID="Label1" runat="server" Text='<%# Bind("quantity") %>'></asp:Label> 
    </ItemTemplate> 
    </asp:TemplateField> 
    <asp:BoundField DataField = "total" HeaderText = "total" 
      DataFormatString="{0:c}" ReadOnly="True" /> 
      <asp:CommandField ShowEditButton="True" /> 

</Columns> 
</asp:GridView> 

<asp:Label ID="totalLabel" runat="server"></asp:Label> 
<br /> 

    </div> 
    </form> 
    </body> 
</html> 
+0

@adatapost、助けを求めるのは決して恥ずかしいことではありません。男は誰にも宿題を頼んでいない。彼はステップバイステップでグリッドビューを使う方法を学んでいます。あなたがいくつかの励ましを提供することができる間、人々に厳しいことはしないでください。 – deadlock

+0

@deadlock - ディスカッションに参加したいと思っているのであれば、私は宿題に反対しているわけではありません。フォーマットされていないコード/テキストを貼り付けることは、Q&Aの目的には役立ちません。 – adatapost

+0

今、私はあなたのコメントを参照してください。最後に私は解決策を見つけました。もちろん、私は宿題をしたくなかった。私を助けるために。 – dali1985

答えて

2

これは、特定のasp.netソリューションではありませんが、それは私が私のWindowsアプリでこのような何かを行う方法です。

まず、GridViewに選択された行があることを確認してください(gridView.SelectedRow != null)。 DataTableオブジェクトを使用すると、数字のインデックスではなく、DataRowタイプのオブジェクトインデックスにアクセスして、目的の行にアクセスできます。フィールドの値を変更する行への参照を取得した後、変更を進めてください。ここで

は例です:

if (gridView.SelectedRow != null) 
{ 
    dataTable.Rows[gridView.SelectedRow].BeginEdit(); 
    dataTable.Rows[gridView.SelectedRow]["yourFieldName"] = newValue; 
    dataTable.Rows[gridView.SelectedRow].EndEdit(); 
    gridView.DataSource = dataTable; 
} 

は、私が前にasp.netを扱ったことがないので、私の答えは、任意の助けであると思います。

関連する問題