У меня есть GridView, в котором есть <asp:Label>
с ID = "Description" и CssClass = "dsc". В моем C # .net-коде за файлом aspx у меня есть таблица данных, в которой есть адреса и описания из базы данных. Я заполняю карту Google картами Lat / Lng, которые конвертируются из адреса с помощью маленьких маркеров Google. При щелчке маркера описание этого адреса появляется над маркером. Это работает нормально.
Теперь для сложной части, я пытаюсь добавить одно и то же описание к каждой строке в GridView, уникальным образом. Имеет ли это смысл? При щелчке по строке (каждая строка будет иметь заголовок, который является описанием из БД), описание необходимо открыть над маркером на карте Google. Каждая строка в GridView будет иметь свое собственное описание и адрес.
Вот мой код:
public partial class NEW_controls_RoadsAndBridges : System.Web.UI.UserControl
{
private SqlConnection conn = new SqlConnection(ConfigurationManager.AppSettings["ConnectionString"].ToString());
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
getInfo();
}
}
protected void getInfo()
{
try
{
conn.Open();
///
///Check to see if connection is good
///
string selectString = "SELECT Address, Description, Date, Lat, Long FROM D2_ReportAProblemForm ORDER BY id DESC";
SqlCommand cmd = new SqlCommand(selectString, conn);
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
adapter.Fill(dt);
BuildScript(dt);
cmd.Dispose();
//If successful
GridView1.DataSource = dt;
GridView1.DataBind();
}
catch (SqlException sqle)
{
//if error
// Response.Redirect("ReportAProblemInfo.aspx?info=fail");
}
finally
{
if (conn != null)
conn.Close();
}
}
private void BuildScript(DataTable tbl)
{
String Locations = "";
String Description = "";
String Address = "";
String java = "";
String java2 = "";
int n = 0;
foreach (DataRow r in tbl.Rows)
{
string Latitude = r["Long"].ToString();
string Longitude = r["Lat"].ToString();
Description = r["Description"].ToString();
Address= r["Address"].ToString();
string marker = "marker" + n.ToString();
// create a line of JavaScript for marker on map for this record
Locations += Environment.NewLine + "var "+marker+@"=new GMarker(new GLatLng(" + Latitude + "," + Longitude + ")); map.addOverlay("+marker+@");";
java += @"GEvent.addListener(" + marker + @", 'click', function()
{
" + marker + @".openInfoWindowHtml('" + Description + @"');
map.checkResize();
map.setCenter(" + marker + @");
});";
java2 += marker+@".openInfoWindowHtml('" + Description + @"');
map.checkResize();
map.setCenter("+marker+@");";
n++;
}
// construct the final script
js.Text =
@"<script type='text/javascript'>
function initialize()
{
if (GBrowserIsCompatible())
{
var map = new GMap2(document.getElementById('map_canvas'),{ size: new GSize(350,300) } );
map.checkResize();
map.setCenter(new GLatLng(35.347769,-98.05),8);
map.openInfoWindow(map.getCenter(), document.createTextNode('Hello'));
" + Locations + java + @"
$(document).ready(function(){
$('.dsc').css('cursor','pointer');
$('.dsc').each(function( intIndex ) {
$(this).bind ('click',function() {
" + java2 + @"
});
});
});
map.setUIToDefault();
}
}
</script> ";
}
protected void GridView1_DataBound(object sender, EventArgs e)
{
string selectString = "SELECT Address, Description, Date, Lat, Long FROM D2_ReportAProblemForm ORDER BY id DESC";
SqlCommand cmd = new SqlCommand(selectString, conn);
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
adapter.Fill(dt);
String Locations = "";
String Description = "";
String java2 = "";
int n = 0;
foreach (DataRow r in dt.Rows)
{
string Latitude = r["Long"].ToString();
string Longitude = r["Lat"].ToString();
Description = r["Description"].ToString();
string marker = "marker" + n.ToString();
// create a line of JavaScript for marker on map for this record
Locations += Environment.NewLine + "var " + marker + @"=new GMarker(new GLatLng(" + Latitude + "," + Longitude + ")); map.addOverlay(" + marker + @");";
java2 += marker + @".openInfoWindowHtml('" + Description + @"');
map.checkResize();
map.setCenter(" + marker + @");";
n++;
js2.Text = @"<script type='text/javascript'>
{
$('.dsc').click(function()
{
" + java2 + @"
}
</script> ";
}//end foreach
}//end _DataBound
}
Есть два <asp:Literal>
с идентификаторами js
и js2
, поэтому я могу поместить jQuery / JavaScript прямо в код C #.
Код GridView:
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false"
ondatabound="GridView1_DataBound">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<table width="500px">
<tr style="background-color: #dcdcdc;" >
<td colspan="2" style="text-align: left; font-weight: bold; font-size: 14xp;">
<asp:Label ID="Description" CssClass="dsc" runat="server" Text='<%#Eval ("Description") %>'></asp:Label>
</td>
</tr>
<tr style="text-align: left; font-weight: lighter; font-size: 12px;">
<td>
<%#Eval ("Address") %>
</td>
<td>
<%#Eval ("Date") %>
</td>
</tr>
</table>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
ПОЖАЛУЙСТА, помогите мне разобраться в этом, я был на этой части в течение недели, и я совершенно ошеломлен.
Спасибо, ребята!