ASP.NET GridView
バインディングの仕組みと全く混同しています。ASP.NETのGridViewとのバインディングの問題
私はGridView
です。今、ページロード(!IsPostBack
を使用して)私はGridView
を拘束しています。
私のgridviewには編集ボタンがあります。私がそれをクリックすると、GridView
は空白になります。私が編集ボタンをクリックすると、ポストバックが発生し、!IsPostback
の条件の中にGridView
をバインドしたので、GridView
をバインドしないので、動作が期待できます。
今、GridView
バインディングを削除して!IsPostback
の外に置くと、編集ボタンが機能します。しかし、編集した値はTextBox
から取得できません。この場合も、更新ボタンがクリックされたときに、!IsPostback
の条件の外でバインドが行われたため、GridView
が再バインドされるため、動作が期待できます。
編集ボタンが正しく動作するコードは何かを知りたいと同時に、TextBox
の編集値を取得することができます。コードを更新しました
質問:以下
<asp:GridView ID="grdExternalLinkSection1" ShowFooter="true" runat="server" Width="100%" AutoGenerateColumns="false" CellPadding="5" EnableViewState="true">
<EmptyDataTemplate>
External Link Title
<asp:TextBox ID="txtExternalLinkTitleEmptySection1" runat="server"></asp:TextBox>
External Link Url
<asp:TextBox ID="txtExternalLinkUrlEmptySection1" runat="server"></asp:TextBox>
<asp:Button ID="btnExternalLinkEmptySection1" OnCommand="grdExternalLinkSection_Button_Clicks" runat="server" Text="Add" CommandName="headernew,1" style="padding:3px; width:56px;" />
</EmptyDataTemplate>
<Columns>
<asp:TemplateField HeaderText="Title">
<ItemTemplate>
<asp:Label ID="lblExternalLinkTitleSection1" runat="server"><%# Eval("Title") %></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtExternalLinkTitleEditSection1" runat="server" Text='<%# Bind("Title") %>'></asp:TextBox>
</EditItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txtExternalLinkTitleFooterSection1" runat="server"></asp:TextBox>
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Url">
<ItemTemplate>
<asp:Label ID="lblExternalLinkUrlSection1" runat="server"><%# Eval("Url")%></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtExternalLinkUrlEditSection1" runat="server" Text='<%# Bind("Url") %>'></asp:TextBox>
</EditItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txtExternalLinkUrlFooterSection1" runat="server"></asp:TextBox>
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Manage">
<ItemTemplate>
<asp:Button ID="btnExternalLinkEditSection1" OnCommand="grdExternalLinkSection_Button_Clicks" runat="server" CommandName="Editing,1" CommandArgument='<%# Container.DataItemIndex %>' Text="Edit" />
<asp:Button ID="btnExternalLinkDeleteSection1" OnCommand="grdExternalLinkSection_Button_Clicks" runat="server" CommandName="Deleting,1" CommandArgument='<%# Container.DataItemIndex %>' Text="Delete" />
</ItemTemplate>
<EditItemTemplate>
<asp:Button ID="btnExternalLinkUpdateSection1" OnCommand="grdExternalLinkSection_Button_Clicks" runat="server" CommandName="Updating,1" CommandArgument='<%# Container.DataItemIndex %>' Text="Update" />
<asp:Button ID="btnExternalLinkCancelSection1" OnCommand="grdExternalLinkSection_Button_Clicks" runat="server" CommandName="Canceling,1" CommandArgument='<%# Container.DataItemIndex %>' Text="Cancel" />
</EditItemTemplate>
<FooterTemplate>
<asp:Button ID="btnExternalLinkAddFooterSection1" OnCommand="grdExternalLinkSection_Button_Clicks" runat="server" CommandName="Footer,1" Text="Add" />
</FooterTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
結合作業を行う機能である:
以下GridView grid;
protected void BindExternalLinks(int SectionID, string ControlName)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
using (SqlDataAdapter adapter = new SqlDataAdapter("user_Newsletter_GetExternalLinks", connection))
{
adapter.SelectCommand.CommandType = CommandType.StoredProcedure;
adapter.SelectCommand.Parameters.Add("@SectionID", SqlDbType.Int).Value = SectionID;
adapter.SelectCommand.Parameters.Add("@PortalID", SqlDbType.Int).Value = PortalID;
DataTable dt = new DataTable();
adapter.Fill(dt);
grid = (GridView)this.FindControl(ControlName);
grid.DataSource = dt;
}
}
}
protected void BindAllExternalLinks()
{
for (int i = 1; i <= NewsLetterSectionCount; i++)
{
BindExternalLinks(i, "grdExternalLinkSection" + i);
grid.DataBind();
}
}
は私のPageLoadです:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindAllExternalLinks();
}
}
以下は私のコマンドですボタンイベント:私はすべてのコマンドボタンのハンドラーを共通にしておきました:
protected void grdExternalLinkSection_Button_Clicks(object sender, CommandEventArgs e)
{
int rowIndex = (e.CommandArgument != "") ? Convert.ToInt32(e.CommandArgument) : -1;
string[] commandNames = e.CommandName.ToString().Split(',');
string command = commandNames[0].ToString().ToLower();
int sectionID = Convert.ToInt32(commandNames[1]);
GridView grid = (GridView)this.FindControl("grdExternalLinkSection" + sectionID);
try
{
if (command == "headernew")
{
TextBox title = grid.Controls[0].Controls[0].FindControl("txtExternalLinkTitleEmptySection" + sectionID) as TextBox;
TextBox url = grid.Controls[0].Controls[0].FindControl("txtExternalLinkUrlEmptySection" + sectionID) as TextBox;
UpdateExternalLinks(ModifyExternalLinks.Insert, sectionID, title.Text, url.Text);
MessageShow("External Link Added Successfully");
}
else if (command == "editing")
{
//grid.EditIndex = rowIndex;
}
else if (command == "canceling")
{
grid.EditIndex = -1;
}
else if (command == "footer")
{
Response.Write("Inside Footer");
}
}
catch (Exception ex)
{
Response.Write(ex.ToString());
}
BindExternalLinks(sectionID, "grdExternalLinkSection" + sectionID);
grid.DataBind(); //here i am binding once the records are modified.
}
のようなすべてのポストバック要求の後にDataBindメソッドを呼び出す必要があり、彼らが読みそれほど難しくないように、段落の中にあなたの記事を分割してください。また、可能な場合は、正しい大文字と句読点を使用してください。 – jadarnel27
GridView aspxのマークアップを教えてください。何が_blank_を意味し、ViewStateが有効になっていますか? –
あなたはGridView全体を表示していない、CommandName = "編集"のボタンがない。そして、どこから 'BindExternalLinks'が呼び出されますか? –