0

.aspx コードは次のとおりです。

<asp:GridView ID="gvLeads" runat="server" DataSourceID="sdsAdminLeads" AllowSorting="True" 
    EnableModelValidation="True" DataKeyNames="leadKey" AutoGenerateColumns="False"
    OnSelectedIndexChanged="gvLeads_selected" OnRowCommand="gvLeads_RowCommand" OnDataBound="gvLeads_DataBound">
    <Columns>
        <asp:CommandField ShowSelectButton="true" SelectText="Edit" ButtonType="Link" />
        <asp:ButtonField CommandName="Details" Text="Details" /> 
    ...(other BoundFields)
    </Columns>
</asp:GridView>

これにより、ページのレンダリング時に次が生成されます。

<td><a href="javascript:__doPostBack('ucLeads$gvLeads','Select$0')">Edit</a></td>
<td><a href="javascript:__doPostBack('ucLeads$gvLeads','Details$0')">Details</a></td>
...
<td><a href="javascript:__doPostBack('ucLeads$gvLeads','Select$1')">Edit</a></td>
<td><a href="javascript:__doPostBack('ucLeads$gvLeads','Details$1')">Details</a></td>
...

ページ デザイナーは、生成される結果の html が次のようになるように、td タグとアンカー タグの間に div タグを配置することを希望しています。

<td><div class=editPanel id=edit0></div><a href="javascript:__doPostBack('ucLeads$gvLeads','Select$0')">Edit</a></td>
<td><div class=detailPanel id=detail0></div><a href="javascript:__doPostBack('ucLeads$gvLeads','Details$0')">Details</a></td>
...
<td><div class=editPanel id=edit1></div><a href="javascript:__doPostBack('ucLeads$gvLeads','Select$1')">Edit</a></td>
<td><div class=detailPanel id=detail1></div><a href="javascript:__doPostBack('ucLeads$gvLeads','Details$1')">Details</a></td>
...

このコードを gvLeads_DataBound 関数に入れてみました:

for (int i = 0; i < gvLeads.Rows.Count; i++)
{
    ((LinkButton)gvLeads.Rows[i].Cells[0].Controls[0]).Text = "<div class=editPanel id=edit" + i + "></div>" + ((LinkButton)gvLeads.Rows[i].Cells[0].Controls[0]).Text;
    ((LinkButton)gvLeads.Rows[i].Cells[1].Controls[0]).Text = "<div class=detailPanel id=detail" + i + "></div>" + ((LinkButton)gvLeads.Rows[i].Cells[1].Controls[0]).Text;
}

ただし、これにより、タグがアンカータグ内に次のように配置されます。

<td><a href="javascript:__doPostBack('ucLeads$gvLeads','Select$0')"><div class=editPanel id=edit0></div>Edit</a></td>
<td><a href="javascript:__doPostBack('ucLeads$gvLeads','Details$0')"><div class=detailPanel id=detail0></div>Details</a></td>
...
<td><a href="javascript:__doPostBack('ucLeads$gvLeads','Select$1')"><div class=editPanel id=edit1></div>Edit</a></td>
<td><a href="javascript:__doPostBack('ucLeads$gvLeads','Details$1')"><div class=detailPanel id=detail1></div>Details</a></td>

したがって、LinkBut​​ton コントロールの .Text プロパティは必要なものではありませんが、セル内のどのコントロールのどのプロパティを使用して、div テキストを必要な場所に配置するかわかりません。

4

3 に答える 3

0

列タグでは、ItemTemplate タグを使用して、複数の項目を 1 つの列に結合できます。それはあなたが必要とすることをするべきだと思います。

div を runat 属性でマークする必要があると思います。

于 2013-01-21T19:27:02.693 に答える
0

LiteralControlセル コントロール コレクションの先頭に div を追加すると、それが実行されます。

gvLeads.Rows[i].Cells[0].Controls.AddAt(0, 
      new LiteralControl("<div class=editPanel id=edit" + i + "></div>"));
于 2013-01-21T19:33:23.533 に答える
0

あなたのデータバウンドで

e.Row.Cells[0].Controls.AddAt(0, new LiteralControl("<div class=editPanel id=edit" + e.Row.RowIndex.ToString() + "><div>"));
e.Row.Cells[1].Controls.AddAt(0, new LiteralControl("<div class=detailPanel id=detail" + e.Row.RowIndex.ToString() + "><div>"));
于 2013-01-21T19:34:52.953 に答える