通常のasp.netグリッドビューがあり、各行で編集モードを有効にし、編集ボタン(Excelグリッドなど)も使用しないようにします。グリッドの外側にある [投稿] ボタン (グリッド全体に対して 1 つのボタン) をクリックして、編集したデータをデータベースに保存したい。どうすれば到達できますか?
6821 次
1 に答える
2
これを実現するには、コントロールとしてテキストボックスを含む各列に ItemTemplates を使用する必要があります..
ASP
<asp:TemplateField HeaderText="Heading Title" SortExpression="Heading Title">
<ItemTemplate>
<asp:TextBox ID="tbTextbox" runat="server" Width="65px" Text='<%# Bind("ColumnNameYouWantToView") %>'></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
これが適切に設定されると、投稿ボタンが必要になります。グリッド内またはグリッド外に配置できます。私は両方使っていますが、こちらはグリッドの内側をフッターとして使っています。
ASP
<asp:TemplateField>
<ItemTemplate>
<asp:Button ID="btnView" runat="server" Text="View" OnClick="btnView_Click" Width="40px" />
</ItemTemplate>
<FooterTemplate>
<asp:Button ValidationGroup="UPDATE" ID="btnUpdate" OnClick="btnUpdate_Click" runat="server" Text="Update" Width="50px"></asp:Button>
</FooterTemplate>
<FooterStyle HorizontalAlign="Center" VerticalAlign="Middle" Width="50px" />
</asp:TemplateField>
これまでのところ、ボタン クリックで foreach ステートメントを使用するのが最も効果的であることがわかりました。このアイデアの最大の欠点は、すべての行が更新されることです。動作しますが、一度に 1 つの行のみを変更すると、すべてが更新されます。ページャーを 10 に設定しているため、常に 10 行が更新されます (1 つのレコードを検索して更新する場合を除き、その 1 つのレコードのみが更新されます)。
コード ビハインド C#
protected void btnUpdate_Click(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["databaseConnection"].ConnectionString);
conn.Open();
//finds the controls within the gridview and updates them
foreach (GridViewRow gvr in gvGridViewName.Rows)
{
string ID = (gvr.FindControl("lblId") as Label).Text.Trim();//finds the control in the gridview
string anotherControl = ((TextBox)gvr.FindControl("tbTextBox")).Text.Trim();//finds the textbox in the gridview
//Your update or insert statements
}
これが私のやり方です。Real World Gridsを調べることもできますが、テキストボックスが空の場合は常にエラーが発生するため、これはうまくいきませんでした。ただし、これは、変更された行を更新するだけで十分「スマート」であると思われますが、この方法で行うにはあまり運がありませんでした。お役に立てれば!
于 2013-11-04T13:28:40.900 に答える