我正在編輯和更新我的數據庫使用gridview本身。我幾乎做了一切,但我唯一的問題是,我有一個下拉列表。我很高興與標籤編輯並將其更改爲下拉列表列表編輯模式。現在我無法單獨更新下拉值到我的分貝。我得到一個名爲system.web.I值我無法得到所需的價值,我面臨的困難,因爲字面控制。我是一個新手所以請幫助我。提前感謝隊友。 我的設計:編輯和更新gridview
<asp:GridView runat ="server" GridLines = "Both" DataKeyNames="book_id"
AutoGenerateColumns ="false" CellPadding ="5" CellSpacing ="5" allowpaging="True" allowsorting="True"
ID="gv_table1" EmptyDataText ="No data exists" OnRowEditing="gv_RowEditing"
PageIndex="0" PageSize="10" ToolTip="true"
OnRowCancelingEdit="gv_RowCancelingEdit" OnRowUpdating="gv_RowUpdating"
OnRowDeleting="gv_RowDeleting" onpageindexchanging="gv_table1_PageIndexChanging"
>
<Columns>
<asp:BoundField DataField="book_name" HeaderText="BookName">
<ControlStyle Width ="60" />
</asp:BoundField>
<asp:BoundField DataField="author_name" HeaderText="Author Name">
<ControlStyle Width ="60" />
</asp:BoundField>
<asp:BoundField DataField="publisher" HeaderText="Publisher">
<ControlStyle Width ="60" />
</asp:BoundField>
<asp:BoundField DataField="year_edition" HeaderText="Year/Edition">
<ControlStyle Width ="60" />
</asp:BoundField>
<asp:BoundField DataField="total_no" HeaderText="Total No">
<ControlStyle Width ="30" />
</asp:BoundField>
<asp:BoundField DataField="available" HeaderText="Available">
<ControlStyle Width ="30" />
</asp:BoundField>
<asp:BoundField DataField="tags" HeaderText="Tags">
<ControlStyle Width ="60" />
</asp:BoundField>
<asp:BoundField DataField="fare" HeaderText="Fare">
<ControlStyle Width ="30" />
</asp:BoundField>
<asp:TemplateField HeaderText="state">
<ItemTemplate>
<asp:Label ID="drpstatus1" AppendDataBoundItems="True" Text='<%# Bind("state") %>' Width ="60" runat="server">
</asp:Label >
</ItemTemplate>
<EditItemTemplate >
<asp:DropDownList ID="drpstatus" runat="server" >
<asp:ListItem Text="available" Value="0"></asp:ListItem>
<asp:ListItem Text="binding" Value="1"></asp:ListItem>
<asp:ListItem Text="lost" Value ="2"></asp:ListItem>
<asp:ListItem Text ="notavailable" Value ="3"></asp:ListItem>
</asp:DropDownList>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText ="Options">
<itemtemplate >
<asp:linkbutton id="btnEdit" runat="server" commandname="Edit" text="Edit" />
<asp:linkbutton id="btnDelete" runat="server" commandname="Delete" text="Delete" />
</itemtemplate>
<edititemtemplate>
<asp:linkbutton id="btnUpdate" runat="server" commandname="Update" text="Update" />
<asp:linkbutton id="btnCancel" runat="server" commandname="Cancel" text="Cancel" />
</edititemtemplate>
</asp:templatefield>
</Columns>
</asp:GridView>
我後面的代碼:
public void setgrid()
{
gv_table1.DataSource = con.GetData("select book_id,book_name,author_name,publisher,year_edition,total_no,state ,available,tags,fare from book_info where status!='deleted'");
gv_table1.DataBind();
}
protected void gv_RowEditing(object sender, GridViewEditEventArgs e)
{
gv_table1.EditIndex = e.NewEditIndex;
this.setgrid();
if (!IsPostBack)
{
Response.Write("not post back");
}
}
protected void gv_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
gv_table1.EditIndex = -1;
this.setgrid();
}
public void gv_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
string totalno = (gv_table1.Rows[e.RowIndex].Cells[4].Controls[0] as TextBox).Text;
string available = (gv_table1.Rows[e.RowIndex].Cells[5].Controls[0] as TextBox).Text;
int total = Convert.ToInt32(totalno);
int avail = Convert.ToInt32(available);
if (total < avail)
{
Page page = HttpContext.Current.Handler as Page;
if (page != null)
{
string error = "available should not be greater than total no";
ScriptManager.RegisterStartupScript(page, page.GetType(), "err_msg", "alert('" + error + "');", true);
}
}
else
{
int bookid = Convert.ToInt32(gv_table1.DataKeys[e.RowIndex].Values["book_id"].ToString());
string bookname = ((TextBox)(gv_table1.Rows[e.RowIndex].Cells[0].Controls[0])).Text;
string fare = (gv_table1.Rows[e.RowIndex].Cells[7].Controls[0] as TextBox).Text;
string authorname = ((TextBox)(gv_table1.Rows[e.RowIndex].Cells[1].Controls[0])).Text;
string publisher = ((TextBox)(gv_table1.Rows[e.RowIndex].Cells[2].Controls[0])).Text;
string yearedition = ((TextBox)(gv_table1.Rows[e.RowIndex].Cells[3].Controls[0])).Text;
string tags = ((TextBox)(gv_table1.Rows[e.RowIndex].Cells[6].Controls[0])).Text;
string spacediv3 = Convert.ToString ((LiteralControl)(gv_table1.Rows[e.RowIndex].Cells[8].Controls[0])) ;
string s = spacediv3 ;
string status = "active";
con.parameters("@bookid", DBConnection.Type.eInt, bookid);
con.parameters("@createduser", DBConnection.Type.eVarchar, "user");
con.parameters("@status", DBConnection.Type.eVarchar, status);
con.parameters("@bookname", DBConnection.Type.eVarchar, bookname);
con.parameters("@authorname", DBConnection.Type.eVarchar, authorname);
con.parameters("@publisher", DBConnection.Type.eVarchar, publisher);
con.parameters("@yearedition", DBConnection.Type.eVarchar, yearedition);
con.parameters("@totalno", DBConnection.Type.eInt, totalno);
con.parameters("@available", DBConnection.Type.eInt, available);
con.parameters("@tags", DBConnection.Type.eVarchar, tags);
con.parameters("@fare", DBConnection.Type.eInt, fare);
con.parameters("@state", DBConnection.Type.eVarchar, s);
con.parameters("@createddate", DBConnection.Type.eDateTime, "");
con.parameters("@modifieduser", DBConnection.Type.eVarchar, "");
con.parameters("@modifieddate", DBConnection.Type.eDateTime, "");
con.ExecProcedure("sp_books");
Response.Redirect("book_add.aspx");
}
}
protected void gv_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
int bookid = Convert.ToInt32(gv_table1.DataKeys[e.RowIndex].Values["book_id"].ToString());
string status = "deleted";
con.parameters("@bookid", DBConnection.Type.eInt, bookid);
con.parameters("@createduser", DBConnection.Type.eVarchar, "user");
con.parameters("@status", DBConnection.Type.eVarchar, status);
con.parameters("@bookname", DBConnection.Type.eVarchar, "");
con.parameters("@authorname", DBConnection.Type.eVarchar, "");
con.parameters("@publisher", DBConnection.Type.eVarchar, "");
con.parameters("@yearedition", DBConnection.Type.eVarchar, "");
con.parameters("@totalno", DBConnection.Type.eInt, "");
con.parameters("@available", DBConnection.Type.eInt, "");
con.parameters("@tags", DBConnection.Type.eVarchar, "");
con.parameters("@fare", DBConnection.Type.eInt, "");
con.parameters("@state", DBConnection.Type.eVarchar, "");
con.parameters("@createddate", DBConnection.Type.eDateTime, "");
con.parameters("@modifieduser", DBConnection.Type.eVarchar, "");
con.parameters("@modifieddate", DBConnection.Type.eDateTime, "");
con.ExecProcedure("sp_books");
Response.Redirect("book_add.aspx");
}
使用驗證器而不是回發+警報。什麼是「con」?我真的希望它不是一個靜態連接!順便說一下,你已經使用'AppendDataBoundItems'作爲'Label'。這隻適用於像ListBox或DropDownList這樣的List控件。 –
我想從下拉列表中獲取選定的值,這是我的問題。 – Prashanth
得到了答案朋友感謝tim – Prashanth