我是C#的新手,正在從VB轉換代碼。 我的目標是使用datakeys從gridview控制元件中獲取資料。 出錯的那幾行是用黑體和斜體表示的。 我不確定我的代碼結構是否有問題,或者asp控制元件是否有問題。 希望能得到任何幫助。 謝謝
。protected void gvDestroy_RowCommand(object sender, GridViewCommandEventArgs e)。
{
string sReturn;
string sLoggedBy;
if (e.CommandName == "Delete"/span>)
{
odsDestroy.DeleteParameters.Add("mod_by", Session["username"].ToString()) 。
}
if (e.CommandName == "Destroy")
{
int index = Convert.ToInt32(e.CommandArgument)。
GridViewRow row = gvDestroy.Rows[index];
sLoggedBy = cDestroyDP.fGetDestroy(***gvDestroy.DataKeys[index]***)
("destroy_id").ToString).Rows[0]["logged_by"].ToString();
if (sLoggedBy == Session["username"].ToString()
{
lblError.ForeColor = System.Drawing.Color.DarkRed;
lblError.Text = "操作員不能記錄和銷毀相同的控制元件!"。
}
else; }
{
sReturn = cDestroyDP.fDestroyControl(***gvDestroy.DataKeys[index]***)
("destroy_id").ToString.Session["username"].ToString).ToString()。
if (sReturn != "0")
{
lblError.ForeColor = System.Drawing.Color.DarkRed;
lblError.Text = sReturn;
}
else ?
{
gvDestroyed.DataBind()。
gvDestroy.DataBind();
}
}
}
這里是gridview控制元件
。<asp:GridView ID="gvDestroy" runat=" server" AllowPaging="true"
AutoGenerateColumns="False" DataSourceID="odsDestroy"
DataKeyNames="destroy_id" EmptyDataText="There Are No Controls To Be Destroyed At This
時候">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton ID="lbDelete"/span> runat="server"/span> CommandName="Delete"/span>
OnClientClick="return confirm('Are you sure you want to delete this
記錄');">洗掉
</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="entry_date" HeaderText="Date Entered" />
<asp:BoundField DataField="beg_control" HeaderText="Beg. 控制" />
<asp:BoundField DataField="end_control" HeaderText="結束控制" />
<asp:BoundField DataField="tot_control" HeaderText="Tot. 控制" />
<asp:BoundField DataField="logged_by" HeaderText="Logged By" />
<asp:TemplateField>
<ItemTemplate>
<asp:Button ID="btnDestroy"/span> runat="server" Text="Destroy"
CommandName="Destroy" CommandArgument="<%# CType(Container,
GridViewRow).RowIndex %>"/>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
uj5u.com熱心網友回復:
DataKeys可以有一個以上的值,但在大多數情況下,只有一個值。
在你的案例中你有:
DataKeyNames="destroy_id"
因此,在vb.net中,要得到這個資訊,你需要行的索引,同時也需要名稱。
例如這樣:
DataKeys("行索引在這里").Item("資料鍵名稱在這里")
所以,你有這個:
gvDestroy.DataKeys[index]("destroy_id"/span>).ToString
兩部分都是一個陣列參考,因此你需要這樣做:
gvDestroy.DataKeys[index]["destroy_id"]
而且你可能甚至不需要tostring。
所以行索引和鍵的名稱都是一個陣列參考,因此都需要"[]"(方括號)。
索引參考不是datakeys陣列的方法,因此兩者都是對該集合的簡單 "索引 "參考,因此兩者都需要[]括號來參考到該集合。
第一個是一個行索引,第二個是一個字串鍵名。如前所述,在大多數情況下,只有一個資料鍵名,但通常情況下,你可以拋出第二個鍵名,即使它不是一個鍵名。
資料鍵名稱的好處是,您可以在網格視圖(或串列視圖)中擁有/使用 PK 行 ID,并且這些 PK ID 值永遠不會暴露在客戶端,因此您不必求助于隱藏欄位,以及其他混亂的方式來完全使用資料庫中的行 PK ID,但您永遠不會將這些值暴露給客戶端瀏覽器(這對于安全原因來說真的很好,因為這樣您可以繼續隱藏,不必暴露應用程式中使用的 PK 值)。
編輯,好的,在陳述了上述內容之后,你有了這個:
編輯,好的,在陳述了上述內容之后,你有了這個:
sLoggedBy = cDestroyDP.fGetDestroy(gvDestroy.DataKeys[index] )
("destroy_id").ToString).Rows[0]["logged_by"].ToString()。
這是不可能的。
這樣可以得到daykey的值
cDestroyDP.fGetDestroy(gvDestroy.DataKeys[index]["destroy_id")
但是,下面的內容完全沒有任何意義
eg: Rows[0]["logged_by"].ToString()
Daykeys只是回傳一個資料鍵欄位的值。
因此,你接著在這里用Rows[0]?????
我的意思是,你似乎想要通過值來記錄,并且你似乎想要資料鍵的名稱值。你想把它們集中在這里嗎--你想發生什么?
你可以得到資料鍵名的值。
你可以用這個方法獲得資料鍵名:
MyDataKeyValue = cDestroyDP.fGetDestroy(gvDestroy.DataKeys[index]["destroy_id")
然后你用這個得到Logged_By:
MyLoggedByValue = row.cell[4] .ToString()
因此,沒有辦法通過名稱來參考資料系結欄位(除非你建立一個輔助函式)。
所以請記住:
對于GV中的模板控制元件,使用.FindControl("控制元件名稱")。
而對于默認列(自動生成),或資料系結列,那么你必須使用.Cells[]集合。
因此,這就是你獲得兩個值的方法 - 現在你只需弄清楚你想對這兩個值做什么,因為你混亂的運算式完全沒有意義。
那么要從網格行中獲取 logged_by 值呢?嗯,這不是一個模板化的列,所以你必須使用 .Cells[] 集合 - 你不能使用名字。
你可以使用這個:
string tt = gRow.Cells[4].ToString()。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/306969.html
標籤:
上一篇:空陣列的元素是否為NULL值?
